アカウント名:
パスワード:
C言語では const は定数というよりも『値の変更不可』の印が付いただけの変数と考える方が自然だと思っています。グローバル変数として配列を用意したい場合に、要素数に const な変数を指定できないというような事情もあります。
なので、個人的には C言語で定数定義だけのために const を用いるのは必ずしも適切ではないと考えており、変数の実体を用意すべき/した方が良い場合は const にしますが、そうでなければ #define にしています。
ついでに、(1)のケースだと int set_xxxxx_size(int size);よりも int set_xxxxx_size(const int size);の方が幾分スマートですよ。
につきましては、その通りですね。後で修正しておこうと思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
計算機科学者とは、壊れていないものを修理する人々のことである
const使わないの? (スコア:0)
同感です (スコア:1, 興味深い)
ついでに、(1)のケースだと
int set_xxxxx_size(int size);よりも
int set_xxxxx_size(const int size);の方が幾分スマートですよ。
Re: (スコア:1)
C言語では const は定数というよりも『値の変更不可』の印が付いただけの変数と考える方が自然だと思っています。
グローバル変数として配列を用意したい場合に、要素数に const な変数を指定できないというような事情もあります。
なので、個人的には C言語で定数定義だけのために const を用いるのは必ずしも適切ではないと考えており、変数の実体を用意すべき/した方が良い場合は const にしますが、そうでなければ #define にしています。
につきましては、その通りですね。後で修正しておこうと思います。
「値の変更不可な変数」==定数ですよ? (スコア:0)
一方で、(定数/変数に関わらずオブジェクトは不必要で)
一意となるシンボルさえあれば良いケースなら、#defineを使うべきかと。
例に挙げられている「グローバルな配列の要素数指定の為だけ」なら、
自分だったらいっそマジックナンバーのままかも。
ちなみにこの場合、const定数は使用不可ですがenum定数は使える筈です。
> サイズ関係は一般に、上記のように計算で値を出すよりも sizeof を用いた方が良い
オブジェクトのサイズが固定長なら、折角準備した事ですし、
constなり#defineなりの定数を使えば良いのでは?
でオブジェクトが可変長なら、今度は事前に定数を準備する意味が薄れてくる、と。
Re:「値の変更不可な変数」==定数ですよ? (スコア:1)
考え方の違いということにもなってきますが、少なくとも単純な数値型の定数の場合、変数の実体を用意する必要が無い限り、 const 変数を用意するよりも define を使う方を好みます。
sizeof については、『自分が定義した値や自前の式による計算結果を使うよりも、コンパイラにちゃんと計算して貰った方が間違いない』という考えに基づいています。
私の考え方として、『コンパイラが何をしてくれて何をしてくれないのかを理解したうえで、それを活かせるようなコーディングをする』という意識が強いのだと思います。