静的領域やスタック領域に配列を確保する時、その要素数はコンパイル時に決められている必要があります。
個人的にはそういった用途でdefineマクロを使いたくないので、なるべくconst int といった定数で要素数を指定しています。
しかしこれだとコンパイルの時に、エラーになる時とならない時があるのですがどんな条件の元判断しているのでしょうか。
gcc version 5.3.0 (GCC)を使用しています。
なぜdefineマクロを使いたくないのかと聞かれるなら、なんとなく綺麗じゃない気がすると言えばそれまでですが、あえて理由をあげるなら、defineマクロだと数値以外も定義できてしまうし、識別子フィールドを汚さないためにundefしなくちゃいけないしといったところです。
#追記
c
1static const int N = 10; 2int array[N];
これだとエラーになるようです。
同じような感じで書いた時、エラーが出なかった事が確かにあったのですが、再現する事が出来ませんでした。
申し訳ないです;;
仕事でプログラムを書いているわけではないので、バージョン管理ソフトなどは使ってないんです...
ですが、下記のような記述の場合、エラーは出ないようです。
c
1static const int N = 10; 2void func () { 3 int array[N]; 4}
#追記 該当コード
大学の先生が不正行為対策として、ネット上のソースコードと一致度合を調べて不正と判断されたら問答無用で単位を落とされてしまうのです。
大学でたまにゲームを作れみたいな課題が出されるのでいずれそれに使おうと思っているので、できれば具体的な該当コードを載せることは避けかったのです。
具体的には、メルセンヌツイスタというアルゴリズムを使った疑似乱数を実装しています。
上部4行だけソースコードを載せます。
これくらいなら不正対策には引っかからないはずです。
c
1const static int N = 624; 2 3static unsigned long X[N]; 4static int I = N+1;
エラーメッセージは以下です。
gcc test.c random.c random.c:3:22: error: variably modified 'X' at file scope static unsigned long X[N]; ^ random.c:4:16: error: initializer element is not constant static int I = N+1;

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/10 12:51
2017/06/10 15:14 編集
2017/06/10 15:19 編集
2017/06/12 04:18
2017/06/12 04:41 編集
2017/06/13 03:27