ISO C90은 C에서 혼합 된 선언과 코드를 금지합니다.
이 방법으로 변수를 선언했습니다.
int i = 0;
경고를받습니다.
ISO C90은 혼합 선언 및 코드를 금지합니다.
어떻게 고칠 수 있습니까?
변수 선언을 블록 맨 위로 이동해야한다고 생각합니다. 즉
{
foo();
int i = 0;
bar();
}
...에
{
int i = 0;
foo();
bar();
}
C99 표준까지는 모든 선언이 블록의 문 앞에 와야했습니다.
void foo()
{
int i, j;
double k;
char *c;
// code
if (c)
{
int m, n;
// more code
}
// etc.
}
C99에서는 선언과 문을 혼합 할 수 있습니다 (예 : C ++). 많은 컴파일러는 여전히 C89로 기본 설정되어 있으며 일부 컴파일러 (예 : Microsoft)는 C99 를 전혀 지원하지 않습니다 .
따라서 다음을 수행해야합니다.
컴파일러가 C99 이상을 지원하는지 확인하십시오. 그렇다면 C89 대신 C99를 컴파일하도록 구성하십시오.
컴파일러 나중에 C99를 지원하지 않거나, 당신도 할 필요가 다른 컴파일러 찾을 것이다 않습니다 를 지원, 또는 모든 선언은 블록 내 모든 문 앞에 와야 있도록 코드를 다시 작성합니다.
컴파일러를 사용 (또는 필요한 인수와 함께 제공)하여 최신 버전의 C 표준, C99 또는 C11 용으로 컴파일하십시오. 예를 들어 GCC 컴파일러 제품군의 경우 -std=c99
.
변수가 블록의 맨 위에 있는지 확인하고로 컴파일하는 경우 다음과 -ansi-pedantic
같은지 확인하십시오.
function() {
int i;
i = 0;
someCode();
}
실제로 오류를 유발하는 원인을 진단하기 위해 먼저 = 0
오류가 발생하면 선언이 코드 다음에 올 가능성이 큽니다.
오류가 없으면 C 표준 시행 / 컴파일 플래그 또는 다른 것과 관련이있을 수 있습니다.
In any case, declare the variable in the beginning of the current scope. You may then initialize it separately. Indeed, if this variable deserves its own scope - delimit its definition in {}.
If the OP could clarify the context, then a more directed response would follow.
-Wdeclaration-after-statement
minimal reproducible example
#!/usr/bin/env bash
set -eux
cat << EOF > main.c
#include <stdio.h>
int main(void) {
puts("hello");
int a = 1;
printf("%d\n", a);
return 0;
}
EOF
# Give warning.
! gcc -std=c89 -Wdeclaration-after-statement -Werror main.c
! gcc -std=c99 -Wdeclaration-after-statement -Werror main.c
! gcc -std=c89 -pedantic -Werror main.c
# Don't give warning.
gcc -std=c89 -pedantic -Wno-declaration-after-statement -Werror main.c
gcc -std=c89 -Wno-declaration-after-statement -Werror main.c
gcc -std=c99 -pedantic -Werror main.c
gcc -std=c89 -Wall -Wextra -Werror main.c
# https://stackoverflow.com/questions/14737104/what-is-the-default-c-mode-for-the-current-gcc-especially-on-ubuntu/53063656#53063656
gcc -pedantic -Werror main.c
The warning:
main.c: In function ‘main’:
main.c:5:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
int a = 1;
^~~
Tested on Ubuntu 16.04, GCC 6.4.0.
참고URL : https://stackoverflow.com/questions/13291353/iso-c90-forbids-mixed-declarations-and-code-in-c
'Nice programing' 카테고리의 다른 글
날짜를 확인하는 방법은 무엇입니까? (0) | 2020.11.10 |
---|---|
NSString = 특정 문자열 값인지 확인하는 방법? (0) | 2020.11.10 |
양식에 동적으로 입력 요소 추가 (0) | 2020.11.10 |
Bash 테스트의 복합 조건 그룹 (0) | 2020.11.10 |
AngularJS의 요소에 대한 지시문 템플릿 고유 ID (0) | 2020.11.10 |