다음 프로그램이 C에서 Undefined Behaviour
을 호출합니까? 위의 프로그램에서C에서의 암시 적 선언
int main()
{
printf("Printf asking: Where is my declaration ?");
}
그래서 위의 코드 호환 완전히 표준 아니면 그냥 몇 가지 구현 고유의 동작을 가지고, printf()
의 암시 적 선언이 무엇입니까?
다음 프로그램이 C에서 Undefined Behaviour
을 호출합니까? 위의 프로그램에서C에서의 암시 적 선언
int main()
{
printf("Printf asking: Where is my declaration ?");
}
그래서 위의 코드 호환 완전히 표준 아니면 그냥 몇 가지 구현 고유의 동작을 가지고, printf()
의 암시 적 선언이 무엇입니까?
예. 범위가 선언되지 않은 것은 UB입니다.
J.2 정의되지 않은 동작
- 기능 함수 프로토 타입으로 정의 된 범위에서 함수 원형없는 함수 호출에 대해, 하나의 프로토 타입은 생략하여 단부 또는 프로모션 후의 인수 유형이 매개 변수 (6.5.2.2)의 유형과 호환되지 않는 이 아닙니다.
또한 주에서 벗어나는 것은 C99에서 괜찮습니다 (즉, 의미 상으로는 return 0;
에 해당). C99 이전 컴파일러의 경우 return 문이 필요합니다. 주 함수의 반환 유형은 int
과 호환되는 유형입니다.
Thanks for J.2, AC :) –
그 이유는 'printf'의 매개 변수 목록이 줄임표로 끝나야한다는 것입니다. 매개 변수의 타입이 정확하기 때문에'puts '에는 적용되지 않습니다. –
줄임표는 함수 구현에만 영향을 미칩니다. 값은 스택에 같은 방법으로 푸시됩니다. 이것은 C의 편리함 중 하나로 간주됩니다. 스택에서 원하는 것을 밀어 낼 수는 있지만 다시 정리해야합니다. 반면 델파이는 스택을 정리하기 위해 호출 된 루틴을 필요로했습니다. –
글쎄, 값을 반환하지 않는다는 것 외에도 ... –
C99에서'main()'의 명시적인'return 0 '은 선택 사항입니다. 편집 된 태그 :-) –