Я был смущен, когда это не скомпилировалось в C:
int main()
{
for (int i = 0; i < 4; ++i)
int a = 5; // A dependent statement may not be declaration
return 0;
}
Я привык к C++, где это скомпилируется. Я просто уставился на какое-то время, пока не вспомнил ответ здесь о SO о том, как в C и C++ разные вещи считаются "заявлениями". Это было в отношении заявления о переключении. "Заявление" после скобок для цикла должно присутствовать как на C, так и на C++. Это можно сделать как для добавления точки с запятой, так и для создания блока {} squiggly bracket block.
В C++ "int a = 7;" считается объявлением, определением и инициализацией. В CI считают, что все это тоже считается, однако в C оно не считается "выражением".
Может кто-то точно разъяснить, почему в C это не утверждение, тогда как в C++ это так? Это путает мою концепцию того, что такое утверждение, потому что один язык говорит, что это так, а другой говорит, что это не так, поэтому я немного смущен.