7

2 次元配列の定義に以下が有効な非常に初期の C の「標準」はありましたか?

int array[const_x, const_y];
int array2[2, 10];

多次元配列にこの (そしてこれだけの) 表記法を使用する古いレガシー コードをいくつか見つけました。コードは、この奇妙な点を除けば、完全に有効な C です (そして当時としては驚くほどよく設計されています)。

[,]との間で変換するマクロを見つけられなかったので[][]、悪ふざけではないと思いますが、むかしむかし、この表記法を受け入れる古い C コンパイラがあったようです。それとも私は何かを逃しましたか?

編集:役立つ場合は、組み込みマイクロコントローラー (atmel) 用です。私が経験から言えることは、組み込みコンパイラは標準に準拠していることであまり知られていないということです。

現在のコンパイラのコードは、すべて[,][][].

4

2 に答える 2

5

このフォーラムの投稿をご覧ください。

コンマ演算子は左側を評価し、結果を破棄してから右側を評価します。したがって、"2,5" は "5" と同じであり、"5,2" は "2" と同じです。

これが起こっていることかもしれませんが、その理由は私にはわかりません。

コンマは、多次元配列のインデックス付けには使用できないことに注意してください。コード A[i, j] は、正しい A[i][j] ではなく、i が破棄された A[j] に評価されます。これは、A[i, j] が正しい Pascal の構文とは異なり、エラーの原因となる可能性があります。

ウィキペディアより

于 2013-01-14T04:53:09.020 に答える
5

最初の正式な標準は ANSI X3.159-1989 であり、最初の非公式な標準は一般に、Kernighan & Ritchie の初版であることが合意されました。これらのいずれも、コンマを使用して 2 次元配列を宣言することはできませんでした。

これは、特定のコンパイラの特異性であるように見えます (一部の準拠プログラムのセマンティクスを変更するため、非標準準拠にするコンパイラ)。

于 2013-01-14T05:44:14.720 に答える