ehe1021   4년 전

scanf 에서 선언을 하지않앗다고 warning 뜨면서 컴파일에러나오는데 뭔가요...

scanf_s를 써도 컴파일에러고

#pragma warning(disable:4996) 를선언해도 컴파일에러입니다.

다른문제에서는 scanf 를그냥사용해도되던데 왜 가끔씩 이런 경고가 뜨는걸까요?

도와주세요 미치겟네요 ㅜㅜㅜ

gallopsys   4년 전

void main()으로 main 함수의 반환값을 void로 선언하셨기 때문입니다.

보통 프로그램이 정상적으로 종료되면 EXIT_SUCCESS(0)를, 정상적으로 종료되지 않으면 EXIT_FAILURE(1)을 반환하는데, 채점 프로그램에서 런타임 에러가 났느냐 안 났느냐를 판단할 때, main 함수의 반환값을 기준으로 판단하는 것으로 알고 있습니다.


C++이나 C99/C11에서는 main 함수에서 사용자가 별도로 return 문을 정의하지 않으면 자동으로 return 0;를 하도록 만들어서 프로그램을 정상적으로 종료할 수 있도록 해줍니다.

main 함수와 main 함수에서의 return value에 대한 설명은 아래에 나와있으니 참고하시길 바랍니다.


결론을 말하면 void main() 대신에 int main()이라고 선언하시길 바랍니다.


In C++ and C99/C11, without a return statement in main function, it's default to return 0;

§ 3.6.1 Main function

A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling std::exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing return 0;

also read wiki page C/C++ main function

In case a return value is not defined by the programmer, an implicit return 0; at the end of the main() function is inserted by the compiler; this behavior is required by the C++ standard.

ehe1021   4년 전

정말죄송한데 너무답답해서

바로 int main() 하고

return 0;

햇는데..

이미지 001.png이렇게 나오네요..

gallopsys   4년 전

코드를 봤는데... int Main()이 아니라 int main()이요!


컴파일 에러를 받으면 뭐 때문에 받았는지 자세하게 이유가 나옵니다. 그걸 참고하시면 쉽게 해결할 수 있습니다.

해당 코드로 제출했을 때 뜨는 컴파일 에러 코드는 다음과 같습니다..


Main.c: In function ‘Main’:
Main.c:5:2: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&N);
  ^
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status


자세히 보시면 undefined reference to 'main'이라고 되어 있는 게 보이실 겁니다. 즉, 다시 말해 main 함수를 찾을 수 없다는 소리죠... 대/소문자에 주의하시길!

ehe1021   4년 전

헉.....

감사합니다...

사이다 ㅠㅠㅠㅠㅠㅠ

덕분에 발 뻗고 잡니다 !!!!

댓글을 작성하려면 로그인해야 합니다.