program story

"C99 모드 외부에서 사용되는 for 루프 초기 선언"GCC 오류를 어떻게 수정합니까?

inputbox 2020. 7. 24. 20:53
반응형

"C99 모드 외부에서 사용되는 for 루프 초기 선언"GCC 오류를 어떻게 수정합니까?


내가 해결하기 위해 노력하고있어 3N + 1 문제 와 나는이 for루프를 그 다음과 같다 :

for(int i = low; i <= high; ++i)
        {
                res = runalg(i);
                if (res > highestres)
                {
                        highestres = res;
                }

        }

불행히도 GCC로 컴파일하려고 할 때이 오류가 발생합니다.

3np1.c : 15 : 오류 : C99 모드 외부에서 사용되는 'for'루프 초기 선언

C99 모드가 무엇인지 모르겠습니다. 어떤 아이디어?


i루프 외부 에서 선언하려고합니다 !

3n + 1 해결에 행운을 빕니다 :-)

예를 들면 다음과 같습니다.

#include <stdio.h>

int main() {

   int i;

   /* for loop execution */
   for (i = 10; i < 20; i++) {
       printf("i: %d\n", i);
   }   

   return 0;
}

C의 for 루프에 대한 자세한 내용은 여기를 참조하십시오 .


C99 모드 를 활성화하는 컴파일러 스위치가 있는데 , 그 중에서도 for 루프 내에서 변수를 선언 할 수 있습니다. 그것을 켜려면 컴파일러 스위치를 사용하십시오.-std=c99

또는 @OysterD가 말했듯이 루프 외부에서 변수를 선언하십시오.


CodeBlocks 에서 C99 모드로 전환하려면 다음 단계를 수행하십시오.

클릭 프로젝트 / 빌드 옵션 다음 탭에서 컴파일러 설정 하위 탭을 선택 기타 옵션을 , 장소를 -std=c99텍스트 영역에서 클릭 확인 .

컴파일러에서 C99 모드 가 켜 집니다.

이것이 누군가를 도울 수 있기를 바랍니다!


이 오류도 얻었습니다.

for (int i=0;i<10;i++) { ..

C89 / C90 표준에는 유효하지 않습니다. OysterD가 말했듯이 다음을 수행해야합니다.

int i;
for (i=0;i<10;i++) { ..

원래 코드는 C99 이상의 C 언어 표준에서 허용됩니다.


@Blorgbeard :

C99의 새로운 기능

  • 인라인 함수
  • 변수 선언이 더 이상 파일 범위 나 복합 명령문의 시작으로 제한되지 않습니다.
  • several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers
  • variable-length arrays
  • support for one-line comments beginning with //, as in BCPL or C++
  • new library functions, such as snprintf
  • new header files, such as stdbool.h and inttypes.h
  • type-generic math functions (tgmath.h)
  • improved support for IEEE floating point
  • designated initializers
  • compound literals
  • support for variadic macros (macros of variable arity)
  • restrict qualification to allow more aggressive code optimization

http://en.wikipedia.org/wiki/C99

A Tour of C99


if you compile in C change

for (int i=0;i<10;i++) { ..

to

int i;
for (i=0;i<10;i++) { ..

You can also compile with the C99 switch set. Put -std=c99 in the compilation line:

gcc -std=c99 foo.c -o foo

REF: http://cplusplus.syntaxerrors.info/index.php?title='for'_loop_initial_declaration_used_outside_C99_mode


For anyone attempting to compile code from an external source that uses an automated build utility such as Make, to avoid having to track down the explicit gcc compilation calls you can set an environment variable. Enter on command prompt or put in .bashrc (or .bash_profile on Mac):

export CFLAGS="-std=c99"

Note that a similar solution applies if you run into a similar scenario with C++ compilation that requires C++ 11, you can use:

export CXXFLAGS="-std=c++11"

I had the same problem and it works you just have to declare the i outside of the loop:

int i;

for(i = low; i <= high; ++i)

{
        res = runalg(i);
        if (res > highestres)
        {
                highestres = res;
        }

}

Jihene Stambouli answered OP question most directly... Question was; why does

for(int i = low; i <= high; ++i)
{
    res = runalg(i);
    if (res > highestres)
    {
        highestres = res;
    }
}

produce the error;

3np1.c:15: error: 'for' loop initial declaration used outside C99 mode

for which the answer is

for(int i = low...

should be

int i;
for (i=low...

Enable C99 mode in Code::Blocks 16.01

  • Go to Settings-> Compiler...
  • In Compiler Flags section of Compiler settings tab, select checkbox 'Have gcc follow the 1999 ISO C language standard [-std=c99]'

For Qt-creator: just add next lines to *.pro file...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99

참고URL : https://stackoverflow.com/questions/24881/how-do-i-fix-for-loop-initial-declaration-used-outside-c99-mode-gcc-error

반응형