"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 언어 표준에서 허용됩니다.
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
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
'program story' 카테고리의 다른 글
Android 앱의 일반적인 .gitignore 파일 (0) | 2020.07.25 |
---|---|
이미지에서 픽셀의 x, y 좌표 색상을 얻는 방법은 무엇입니까? (0) | 2020.07.25 |
su를 사용하여 나머지 bash 스크립트를 해당 사용자로 실행하려면 어떻게합니까? (0) | 2020.07.24 |
두 개의 현을 인터리빙하는 가장 파이썬적인 방법 (0) | 2020.07.24 |
Angular v5에서 Angular v6으로 프로젝트를 업그레이드하고 싶습니다 (0) | 2020.07.24 |