Re: 69.8 심사문제 문의입니다
, 도장_ 관리자님이 작성Visual Studio에서 빌드한 이후 아래 출력 창의 메시지를 잘 보면 다음과 같은 항목이 있습니다.
warning C4716: 'getPrintFunc': 값을 반환해야 합니다.
C 언어의 경고는 에러로 간주해야 합니다. 잘못 작성한 코드라는 뜻입니다.
UNIT 69.4를 보면 함수 포인터를 함수의 반환값으로 사용하는 것입니다. 지금 문의한 코드는 우연의 일치로 결과가 나오는 것처럼 보이는 것이지만, return을 하지 않으니까 올바른 로직으로 구성된 코드가 아닙니다.
UNIT 69.4의 예제를 보면
int (*getAdd())(int, int) // 함수 포인터를 반환값으로 지정
{
return add; // add 함수의 메모리 주소를 반환
}
심사문제는 인수를 받지 않아서 이상하게 코드를 작성해도 동작하는 것처럼 보일 뿐입니다.
심사가 실행되는 리눅스 환경에서 제출한 코드를 실행하면
signal: segmentation fault (core dumped)이렇게 프로그램이 충돌로 중단됩니다. 함수 포인터가 함수를 반환해야 하는데, 반환하는 함수가 없으므로 엉터리 주소를 받게 되고, 프로그램이 망가지게 됩니다.
Visual Studio에서도 디버깅으로 실행하면 결과를 출력하는 도중에 다음과 같이 에러가 발생합니다. 결국 프로그램이 잘못 동작해서 죽었다는 뜻입니다.