2010-02-07 4 views
3

을 선언되지 않은 단지Cygwin에서 GCC는 '출구'에 대해 불평 IDE에 실패

gcc code.c 

아무 메시지가 없으며, 출력 파일이 성공적으로 생성됩니다. 출력 된 파일이 작동합니다. 내가 IDE에서 같은 Cygwin에서 설치의 GCC 컴파일러를 시도 할 때, (I 해봤 넷빈즈와 데브 - C + +를) 내가 다른 무엇을 볼 수 없어 다음과 같은 오류가

main.cpp:27: error: `exit' undeclared (first use this function) 
main.cpp:27: error: (Each undeclared identifier is reported only once for each function it appears in.) 
main.cpp:77: error: `write' undeclared (first use this function) 
main.cpp:78: error: `close' undeclared (first use this function) 

를 얻을. 왜 컴파일되지 않습니까?

OK, IDE에서 파일의 확장자는 .cpp 였지만 터미널에서 컴파일 할 때는 .c 확장자가있었습니다. 그래서, 내 새로운 질문은 왜 그것이 C++ 파일로 취급 될 때 컴파일되지 않는가하는 것이다. C가 C++의 하위 집합이 아닌가?

+1

코드를 게시 할 수 있습니까? – ergosys

+1

# # 을 # 포함 했습니까? –

답변

5

C++는 C보다 엄격합니다. C에서는 프로토 타입없이 함수를 호출 할 수 있지만 C++에서는이를 허용하지 않습니다.

이 문제를 해결하려면 추가 할 :

또한
#include <stdlib.h> 

, 명령 줄에서 컴파일. 당신은 중요한 경고를 얻을 수 있습니다 있도록 -Wall 플래그를 사용하십시오 :

gcc -Wall code.c 
0

.cpp 개의 파일을 컴파일하려면 g++을 사용해야합니다.

+0

exit(), write(), close()가 모두 C에서 지원됩니다. – sud03r

+0

내가 말했듯이, 'gcc file.c' – Verhogen

0

아마도 IDE가 포함 파일에 액세스 할 수 없기 때문에 cygwin gcc 컴파일러에서 /usr/include (예상치 못한)에이를 예상 할 수 있으며 dev-cpp가 액세스하지 못할 수 있습니다.

1

를 IDE는 컴파일러에 fussier 옵션을 사용하고 있습니다. 일부 헤더를 포함해야합니다.

#include <stdlib.h> // exit() 
#include <unistd.h> // close(), write() 

기본 옵션을 사용하면 컴파일 할 수있는 거의 모든 것이 허용됩니다. IDE는이를 보면서 컴파일러 옵션 중 하나 인 '- Wmissing-prototypes'를 설정합니다.


C++ 컴파일러로 코드를 컴파일하는 경우 사용하기 전에 모든 함수가 선언되어야합니다. C는 그것에 대해 더 가볍다 (또는 더 안좋을 수있다). 모든 함수가 정의되거나 참조되기 전에 선언되도록하는 것이 권장되지만 필수는 아니다. C++에서는 선택 사항이 아닙니다.

C++의 하위 집합 인 C 하위 집합이 있습니다. C++이 아닌 C 비트가 있으며 C가 아닌 많은 비트가 있습니다. 특히 임의의 C 프로그램은 일반적으로 C++ 프로그램이 아닙니다. 예를 들어, C 프로그램은 'exit()'을 선언하지 않을 수도 있지만 아직 그것을 사용하고 컴파일 할 수 있습니다. C++ 프로그램은 사용자가 그것을 컴파일하고 컴파일하기 전에 'exit()'을 선언해야합니다.

관련 문제