c에 데이터 유형이 없는 변수 선언
이 점에서.c프로그램.
a=8;
main()
{
printf("%d", a);
}
변수 a는 어떠한 데이터 형식도 없이 선언되었지만 여전히 이 프로그램은 성공적으로 컴파일되어 원하는 출력을 제공합니다.
출력 ::
8
그것을 하나에서 봅니다.
그러나 main 내부에 동일한 변수를 선언하면 컴파일 오류가 발생합니다.
main()
{
a=8;
printf("%d", a);
}
출력 ::
prog.c:2: warning: return type defaults to ‘int’
prog.c: In function ‘main’:
prog.c:3: error: ‘a’ undeclared (first use in this function)
prog.c:3: error: (Each undeclared identifier is reported only once
prog.c:3: error: for each function it appears in.)
prog.c:4: warning: implicit declaration of function ‘printf’
prog.c:4: warning: incompatible implicit declaration of built-in function ‘printf’
여기 보세요.
첫 번째 프로그램은 어떻게 진행되고 두 번째 프로그램은?
여기 보이는 것이 직장에서의 "묵시적 인트 룰"입니다.간단히 말해서, 다음과 같은 규칙이 있습니다.
"명시적 유형 이름 없이 선언된 변수는 다음 유형으로 가정됩니다.
int."
이 규칙은 c99 표준에서[Ref 1] 취소되었습니다.그러나 컴파일러 및 설정에 따라 첫 번째 예제는 경고와 함께 컴파일되거나 (엄격한 컴파일 설정으로) 컴파일에 실패할 수 있습니다.
c99 Standard를 준수하는 엄격한 설정으로 첫 번째 예제를 컴파일하면 컴파일러가 근본 원인을 알려줍니다.
여기 확인해 보세요.
cc1: 경고가 오류로 처리됨
prog.c:1: 오류: 데이터 정의에 유형 또는 스토리지 클래스가 없습니다.
prog.c:1: 오류: 'a' 선언에서 기본값을 'int'로 입력합니다.
prog.c:3: 오류: 반환 유형 기본값은 'int'입니다.
prog.c: 함수 '메인'에서:
prog.c:4: 오류: 함수 'printf'의 암묵적 선언
prog.c:4: 오류: 내장 함수 'printf'의 호환되지 않는 암묵적 선언
편집:
첫번째 예는 효과가 있지만 두번째 예는 효과가 없는 이유는?
규칙에서 "variable declated"라는 단어를 강조하는 것에 주목합니다.
첫 번째 예에서는 문장이 전역 범위에 있으므로 암시적 선언으로 처리되고 암시적 Int 규칙이 적용됩니다.
두 번째 예제에서 문장은 선언이 아닌 할당으로 작동합니다.선언이 없으므로 암시적 int 규칙은 여기에 적용되지 않습니다.어떤 유형도 없다면 컴파일러는 무엇이 유형인지 결정할 수 없습니다.a따라서 오류를 보고합니다.
[참조 1]
C99 표준:서문
파라 5:
이 판은 이전 판을 대체합니다.
ISO/IEC 9899:1990, 에 의해 수정 수정된.ISO/IEC 9899/COR1:1994,ISO/IEC 9899/COR2:1995,그리고.ISO/IEC 9899/AMD1:1995.
이전 에디션에서 변경된 주요 사항은 다음과 같습니다.
.....
.....
— 암묵적인 int를 제거합니다.
.....
.....
a=8;함수의 외부는 선언문처럼 보입니다. 여기서.a은입니다.= 8는 이니셜라이저 입니다.수 허용하는 데 은 C는다입니다.int그 경우에는이후로는 더 (C99 이후로 이는 더 이상 허용되지 않습니다.
a=8;식 문장(할당 표현식)과 기호처럼 보입니다.a해결되지 않았습니다. (함수 이외의 식문은 없습니다.)
, 같은 걸 ,static a = 8; 이고, 이 int 로로 .
어쨌든, 그것에 의존하지 마세요 :-) 당신의 타입을 명확하게 적으세요.
에서는 어떤 으로 C 는 int.
은 입니다를 할 수 .registerregister int, 아니면unsignedunsigned int,autoauto int,그리고.staticstatic int 에 대한 을 부여합니다.int, 하지만 당신이 그렇게 하든지 말든지는 당신의 선택입니다.
데이터 유형을 작성하지 않았지만 변수에 데이터 유형(int)이 있습니다.
그 기능을 이용하는 것은 나쁜 관행입니다.
분명히 당신의 컴파일러는 함수 안에서 그런 일이 일어나도록 허용하지 않습니다.함수에서 "a=8;"을 허용하면 특정 유형을 잡기가 매우 어렵기 때문에 이는 타당합니다.
에는 C++11 에는가 auto키워드.는 강력한 의 언어로된 각에 대해 .불행하게도 C와 C++는 강력한 유형의 언어로 선언된 각 변수에 대해 엄격한 유형을 정의해야 합니다.일부 컴파일러들은 int를 기본값으로 가정하지만, 그것은 그들의 좋은 마음이고 그것은 잘못된 프로그래밍 습관으로 인정되기 때문에 사용되어서는 안 됩니다.
함수 파라미터도 암시적 int로 쓸 수 있습니다.예:
fun(n){printf("%d",n);}
위의 코드는 잘 작동하지만 일단 매개 변수에 고정된 데이터 유형이 포함되면 다음과 같습니다.
fun(n,char c){ printf("%d",n);}
char'|'char' 앞에 error: error: expected ')가 표시됩니다.
언급URL : https://stackoverflow.com/questions/11064292/declaring-variables-without-any-data-type-in-c
'programing' 카테고리의 다른 글
| iOS 7의 사용자 지정 글꼴 (0) | 2023.10.06 |
|---|---|
| jQuery - 선택한 옵션 사용 안 함 (0) | 2023.10.06 |
| Spring: Response Entity를 사용하여 빈 HTTP 응답을 반환하는 것이 작동하지 않습니다. (0) | 2023.10.06 |
| 초기화되지 않은 컬렉션 PL/SQL 참조 (0) | 2023.10.06 |
| UITextField 반환 키에 대한 작업을 추가하는 방법은 무엇입니까? (0) | 2023.10.06 |