Унарный + оператор на инт &
У меня есть следующее заявление, и оно компилируется:
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?
...
}
Почему я не получаю ошибку компилятора?
3 ответа
Потому что это не так, просто заявление без эффекта.
Если вы скомпилируете (gcc/g++) с флагом -Wall, вы увидите.
Я думаю, из заголовка этого вопроса "После точки с запятой другая команда и она компилируется", что вы думаете, что может быть только одна команда / оператор на строку?
Как вы заметили, это неверно. C++ и C являются языками свободной формы (это означает, что вы можете расположить символы любым удобным для вас способом). Точка с запятой - это просто терминатор оператора.
Вы можете написать foo();bar();
или же
foo();
bar();
Обе (и более) договоренности полностью в порядке. Кстати, это особенность, а не ошибка. Некоторые языки (Python, ранний Fortran) не имеют этого свойства.
Как правильно отметили другие, ваше конкретное утверждение - это бездействие, утверждение без какого-либо эффекта. Некоторые компиляторы могут предупредить вас об этом, но ни один компилятор не предупредит вас о нескольких операторах в одной строке.