[解決済み] char s[static 10]のような関数の配列パラメータでstaticキーワードを使用する目的は何ですか?
2022-04-24 14:48:30
質問
ソースコードを見ていたら、こんな関数がありました。
void someFunction(char someArray[static 100])
{
// do something cool here
}
実験してみると、他の修飾語も出現するようだ。
void someFunction(char someArray[const])
{
// do something cool here
}
の中だけしか使えないようです。
[
]
配列が関数のパラメータとして宣言されている場合。これらは何をするのですか?なぜ関数のパラメータでは違うのですか?
どのように解決するのですか?
最初の宣言は、コンパイラに
someArray
は
少なくとも
100要素の長さ。これは最適化に利用できる。例えば、次のような意味もあります。
someArray
は決して
NULL
.
なお、C 規格では、関数の呼び出しがこれらの要件を満たさない場合(つまり、無言の未定義動作である場合)、コンパイラに診断させる必要はないとのことです。
2番目の宣言は、単に
someArray
(ただし
someArray
の要素!)をconstとして記述することはできません。
someArray=someOtherArray
. これは、パラメータが
char * const someArray
.
この構文は、最も内側の
[]
関数パラメータリスト内の配列宣言子で、他の文脈では意味をなさないでしょう。
上記の両方のケースをカバーする標準テキストは、C11 6.7.6.3/7 にあります (C99 では 6.7.5.3/7 でした)。
パラメータを''型の配列''と宣言した場合、''型への修飾されたポインタ''に修正されなければならない。
[
と]
の配列型導出の キーワードstaticが[
と]
の場合,関数を呼び出すたびに,対応する実引数の値によって,少なくとも同じ数の配列の最初の要素にアクセスできなければならない。 を指定する。
関連
-
[解決済み] Swiftのstatic funcとclass funcの違いは何ですか?
-
[解決済み] Pythonの関数内の静的変数に相当するものは何ですか?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] C++の関数内のスタティック変数のライフタイムは?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】C言語の「static」関数とは?
-
[解決済み】クラスで「static」キーワードは何をするのですか?
-
[解決済み】静的初期化コードブロックと非静的初期化コードブロックの違いは何ですか?
-
[解決済み】C言語のchar arrayとchar pointerの違いは何ですか?
-
[解決済み】C++におけるstaticキーワードとその様々な使用法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
関数 'malloc' の暗黙の宣言に対する解決策
-
C - 添え字の値が配列でもポインタでもベクトルでもないエラー
-
[解決済み] MIPSのネストされたForループと配列の使用
-
[解決済み] C言語でchar配列をコピーする方法は?
-
[解決済み] C言語の書式指定子 %ul と %lu の違いは何ですか?
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] C言語で関数をパラメータとして渡すにはどうすればよいですか?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] longをフォーマットするprintfの引数は何ですか?