assert() перед объявлением переменных: почему это работает?

Nov 13, 2011 22:36


Недавно обнаружил, что assert() можно вставлять перед объявлением переменных. Это существенно упрощает жизнь, и я стал активно этим пользоваться. Но я не понимаю, почему это работает.

#include int main() { assert(0); int N = 0; return N; }
Код успешно транслируется командой gcc -Wall -Wextra main.c.

Результат обработки ( Read more... )

программирование

Leave a comment

Comments 7

mr_mumble November 13 2011, 19:44:54 UTC
-Wdeclaration-after-statement

или сразу -pedantic.

Reply

cristobal_junta November 13 2011, 20:01:34 UTC
Вот это да!
Мягко говоря, я очень удивлен.
С каких это пор в C разрешено declaration after a statement in a block?

Reply

mr_mumble November 13 2011, 20:25:01 UTC

ISO C99 and ISO C++ allow declarations and code to be freely mixed within compound statements.
Начиная с какой-то версии GCC: As an extension, GCC also allows this in C90 mode.

Reply

cristobal_junta November 14 2011, 18:15:03 UTC
Если это не будет проглатывать icc и bgxlc, то придется выставлять что-то в духе -pedantic -ansi и всё такое…

Reply


Leave a comment

Up