次のステートメントがあり、コンパイルされます。
static unsigned char CMD[5] = {0x10,0x03,0x04,0x05,0x06};
int Class::functionA(int *buflen)
{
...
int length = sizeof(CMD); + *buflen; // compiler should cry! why not?
...
}
コンパイラ エラーが発生しないのはなぜですか?
次のステートメントがあり、コンパイルされます。
static unsigned char CMD[5] = {0x10,0x03,0x04,0x05,0x06};
int Class::functionA(int *buflen)
{
...
int length = sizeof(CMD); + *buflen; // compiler should cry! why not?
...
}
コンパイラ エラーが発生しないのはなぜですか?
それは間違っていないので、効果のないステートメントだけです。
フラグ-Wallを指定して(gcc / g ++)をコンパイルすると、表示されます。
この質問のタイトル「セミコロンの後に別のコマンドをコンパイルすると」から、1行に1つのコマンド/ステートメントしかないと思いますか?
お気づきのとおり、これは誤りです。C++ と C は自由形式の言語です(つまり、記号を好きなように配置できます)。セミコロンは単なるステートメント ターミネータです。
書いfoo();bar();
たり、
foo();
bar();
両方 (およびそれ以上) の配置はまったく問題ありません。ちなみに、これは機能であって、バグではありません。一部の言語 (Python、初期の Fortran) にはそのプロパティがありません。
他の人が正しく指摘しているように、あなたの特定のステートメントはノーオペレーションであり、効果のないステートメントです。一部のコンパイラはそれについて警告する場合がありますが、1 行に複数のステートメントがあることを警告するコンパイラはありません。