반응형
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
반응형
'programing' 카테고리의 다른 글
코딩 규칙 - 명명 규칙 (0) | 2022.08.10 |
---|---|
반환을 위해 개체를 일반 유형으로 캐스팅 (0) | 2022.08.10 |
C/C++ 회선 번호 (0) | 2022.08.10 |
int vs 플로어에 캐스팅 (0) | 2022.08.10 |
Vuex ReferenceError가 정의되지 않았습니다.값을 올바르게 설정하려면 어떻게 해야 합니까? (0) | 2022.08.10 |