[c] “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 : 오류 : ‘for’루프 초기 선언이 C99 모드 외부에서 사용됨
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의 새로운 기능
- 인라인 함수
- 변수 선언은 더 이상 파일 범위 또는 복합 명령문의 시작으로 제한되지 않습니다.
- long long int, 선택적 확장 정수 유형, 명시 적 부울 데이터 유형 및 복소수를 나타내는 복합 유형을 포함한 몇 가지 새로운 데이터 유형
- 가변 길이 배열
- BCPL 또는 C ++에서와 같이 //로 시작하는 한 줄 주석 지원
- snprintf와 같은 새로운 라이브러리 함수
- stdbool.h 및 inttypes.h와 같은 새 헤더 파일
- 유형 일반 수학 함수 (tgmath.h)
- IEEE 부동 소수점에 대한 향상된 지원
- 지정된 이니셜 라이저
- 복합 리터럴
- 가변 매크로 지원 (가변 매크로 매크로)
- 보다 적극적인 코드 최적화를 허용하도록 제한 제한
답변
C 변경으로 컴파일하면
for (int i=0;i<10;i++) { ..
에
int i;
for (i=0;i<10;i++) { ..
C99 스위치 세트로 컴파일 할 수도 있습니다. 컴파일 라인에 -std = c99를 입력합니다.
gcc -std=c99 foo.c -o foo
참조 : http://cplusplus.syntaxerrors.info/index.php?title= ‘for’_loop_initial_declaration_used_outside_C99_mode
답변
Make 와 같은 자동화 된 빌드 유틸리티를 사용하는 외부 소스에서 코드를 컴파일하려는 경우 명시적인 gcc 컴파일 호출을 추적 할 필요가 없도록 환경 변수를 설정할 수 있습니다. 명령 프롬프트에 입력하거나 .bashrc (또는 Mac의 경우 .bash_profile)를 입력합니다.
export CFLAGS="-std=c99"
C ++ 11이 필요한 C ++ 컴파일로 유사한 시나리오를 실행하는 경우 유사한 솔루션이 적용됩니다. 다음을 사용할 수 있습니다.
export CXXFLAGS="-std=c++11"