興味深い事実を発見しましたが、どのように動作するのか分かりませんでした。
次のコードは完全に機能しています。Cでconst変数を持つ配列サイズ
#include <stdio.h>
int main(){
const int size = 10;
int sampleArray[size];
typedef char String [size];
return 0;
}
次に、グローバルスコープの定数変数のみを使用しようとしましたが、それでも問題ありません。
#include <stdio.h>
const int size = 10;
int main(){
int sampleArray[size];
typedef char String [size];
return 0;
}
しかし、私もグローバルに配列の範囲を変更した場合、私は次のようだ:
error: variably modified ‘sampleArray’ at file scope
#include <stdio.h>
const int size = 10;
int sampleArray[size];
typedef char String [size];
int main(){
return 0;
}
をそして、私はそれを取得できませんでした! ex変数の代わりにconst変数を置き換えます。 #define
にも大丈夫でしょう。
私は、#define変数が前処理されていることを知っています。私が知る限り、const変数は読み取り専用です。しかし、結局のところ、グローバルな範囲を作るのは何ですか?
2番目のコードが問題ない場合は、3番目のコードに何が問題なのか分かりません。
詳細:Cには 'const'オブジェクトがありますが、_constant_はありません。 'const'は_constant_を意味するようですが、' const'オブジェクトは_constant_ではありませんが、「このオブジェクトは変更してはいけませんが、変更が試行されれば何が起こるか知っていますか? Cでは、真の_constant_は '42'のようなコードであり、これは' int'型の整数定数です。したがって、 'const int size = 10;'は_constant_変数ではありません。 – chux
配列には一定のサイズはありませんが、可変長配列です。 – Olaf
彼らが言ったように、Cには 'const'オブジェクトがあります。これは実際には読み込み専用*変数*です。 Cf。 C++は実際にはコンパイル時*定数*である真の 'const'オブジェクトを持っています。 –