我有以下声明,它编译:
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++),您会看到。
我猜从这个问题的标题“在分号后另一个命令并编译”你认为每行只能有一个命令/语句?
正如您所注意到的,这是错误的。C++ 和 C 是自由格式语言(这意味着您可以以任何您认为合适的方式排列符号)。分号只是一个语句终止符。
你可以写foo();bar();
或
foo();
bar();
两种(以及更多)安排都很好。顺便说一句,这是一个功能,而不是一个错误。某些语言(Python、早期的 Fortran)没有该属性。
正如其他人正确指出的那样,您的特定声明是无操作的,没有任何效果的声明。一些编译器可能会警告您 - 但没有编译器会警告您一行中有多个语句。