전체 코드를 생략 할 것이지만 지금까지이 테스트는 상당히 혼란 스러울 수 있습니다.
이것은 ANSI C, C ++ 및 C ++ 11에서 허용됩니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int p, q, r, s, t, u;
char* str = malloc(1000);
while(gets(str) != NULL) {
sscanf(str, "%d %d %d %d %d %d", &p, &q, &r, &s, &t, &u);
printf("%d %d %d %d %d %d\n", p, q, r, s, t, u);
}
}
이제 불안한 사실이 나타납니다.이 코드는 ANSI C에서는 런타임 오류가 발생하지만 C ++ 및 C ++ 11에서는 허용됩니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int p, q, r, s, t, u;
//== 6 instead of != EOF also gives me a runtime error
while(scanf("%d %d %d %d %d %d", &p, &q, &r, &s, &t, &u) != EOF) {
printf("%d %d %d %d %d %d\n", p, q, r, s, t, u);
}
}
당신은 잊어 버렸습니다 return 0;
-C에서 이것은 main()
쓰레기 상태를 쉘에 반환 한다는 것을 의미합니다 . C ++에서는 return 0;
허용되며 기본 상태 0 (== EXIT_SUCCESS
)이 반환됩니다. 그러나 C에서는 두 프로그램 모두 정의되지 않은 상태를 반환합니다. 첫 번째 경우 운이 좋으면 0이 반환됩니다. 두 번째 경우에는 0이 아닌 다른 값이 반환됩니다 (아마 -1). C 또는 C ++로 작업하는지 여부에 관계없이 항상 main에서 유효한 상태를 반환하는 습관을들이십시오.
자세한 내용은 이 훌륭한 질문과 답변 을 참조하십시오.
경고를 활성화하여 컴파일하면 (예 gcc -Wall ...
:) 즉시이 실수를 경고하고 시간을 절약 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다