Есть ли способ включить (int i = 0; ... в gcc, не включая режим c99 - PullRequest
7 голосов
/ 07 февраля 2012

У меня очень большая программа, которая компилируется с gcc без предупреждений.

Если я включаю режим c99 --std = c99 в командной строке, он выдает огромное количество предупреждений и ошибок.

Но я люблю идиому for(int i=0; i<20; i++){ code }

вместо {int i; for (i=0; i<20; i++){ code }}

Есть ли способ сказать gcc, чтобы разрешить это и только это?

В качестве альтернативы, есть ли способ включить режим c99 в определенных функциях, над которыми я работаю? Что-то вроде

#pragma c99 on 

for(int i=0; i<99; i++)
{
    code
}

#pragma c99 off

Ответы [ 2 ]

7 голосов
/ 07 февраля 2012

Вероятно, что предупреждения и ошибки вызваны тем, что -std=c99 запрашивает C99, соответствующий стандарту, что означает, что многие специфичные для платформы функции, которые загрязняют пространство имен C99, не определены.

Вместо этого вам следует попробовать--std=gnu99, что эквивалентно C99 режиму по умолчанию gnu89.

2 голосов
/ 07 февраля 2012

В качестве альтернативы для использования -std = gnu99 вы можете отключить отдельные предупреждения:

-Wno-declaration-after-statement

Чтение info gcc :

`-Wdeclaration-after-statement (C and Objective-C only)'
     Warn when a declaration is found after a statement in a block.
     This construct, known from C++, was introduced with ISO C99 and is
     by default allowed in GCC.  It is not supported by ISO C90 and was
     not supported by GCC versions before GCC 3.0.  *Note Mixed
     Declarations::.
...