programing

C: loop int 초기 선언용

goodsources 2022. 8. 10. 22:24
반응형

C: loop int 초기 선언용

다음 gcc 오류에 대해 누가 좀 더 자세히 설명해 주시겠어요?

$ gcc -o Ctutorial/temptable.out temptable.c 
temptable.c: In function ‘main’:
temptable.c:5: error: ‘for’ loop initial declaration used outside C99 mode

temptable.c:

...
/* print Fahrenheit-Celsius Table */
main()
{
    for(int i = 0; i <= 300; i += 20)
    {
        printf("F=%d C=%d\n",i, (i-32) / 9);        
    }
}

추신: 어렴풋이 생각나네요.int i먼저 선언해야 한다for루프입니다. 저는 C 표준의 역사적 맥락을 제공하는 답을 찾고 있다고 말해야 합니다.

for (int i = 0; ...) 

는 C99에서 도입된 구문입니다.C99 모드를 사용하려면 , 다음의 순서에 따라서 C99 모드를 유효하게 할 필요가 있습니다.-std=c99(또는 이후 표준)을 GCC로 전송합니다.C89 버전은 다음과 같습니다.

int i;
for (i = 0; ...)

편집

역사적으로 C언어는 프로그래머가 항상 블록의 선두에 모든 변수를 선언하도록 강요했습니다.예를 들어 다음과 같습니다.

{
   printf("%d", 42); 
   int c = 43;  /* <--- compile time error */

다음과 같이 고쳐써야 합니다.

{
   int c = 43;
   printf("%d", 42);

블록은 다음과 같이 정의됩니다.

block := '{' declarations statements '}'

C99, C++, C# 및 Java를 사용하면 블록 내 임의의 위치에 변수를 선언할 수 있습니다.

진짜 이유(추측)는 다른 컴파일러 패스를 사용하지 않고 C 소스를 해석하면서 내부 구조(스택 크기 계산 등)를 가능한 한 빨리 할당하는 것입니다.

C99 이전에는 블럭의 시작 부분에서 로컬 변수를 정의해야 했습니다.C99는 로컬 변수 정의와 명령어를 혼재시킬 수 있는 C++ 기능을 Import하여for그리고.while표현을 제어하다

언급URL : https://stackoverflow.com/questions/1287863/c-for-loop-int-initial-declaration

반응형