2010-12-26 2 views
4

저는 'accelerated C++'에서 Cpp를 산발적으로 가르쳐 왔으며 최근에 #include <algorithm> 문을 잊어 버렸을 때 코드 (transform 및 find_if 포함)가 컴파일되어 성공적으로 실행되었음을 확인했습니다. 이 후 모든 표준 헤더 포함 문을 모두 제거하고 내 코드가 여전히 실행되었음을 확인했습니다.'#include'문을 넣지 않고 cpp 표준 라이브러리에 액세스하는 방법은 무엇입니까?

전 처리기 명령을 이해할 수 없다고 생각하지만 책을 끝내면 해결 될 것입니다.하지만 지금은 헤더를 부적절하게 만들 때 내 터미널이 내게 소리를 지르도록하는 방법을 알아야합니다. 어디에서 표준 라이브러리에있는 것들을 배웁니다. 나는 OS 10.6.5를 실행하고

그래서 나는 다음과 같은 유닉스 EXE 파일로 내 코드를 컴파일 할 필요가 : 나는 배우고 있기 때문에

CC = g++ 
CFLAGS = -Wall 
PROG = TrainingProject23 

SRCS = TrainingProject23.cpp 

ifeq ($(shell uname),Darwin) 
    LIBS = -framework OpenGL -framework GLUT 
else 
    LIBS = -lglut 
endif 

all: $(PROG) 

$(PROG): $(SRCS) 
    $(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS) 

clean: 
    rm -f $(PROG) 

는 OpenGL을위한 빌드 프로토콜을 포함을 그뿐만 아니라 그것은 쉬운만큼 이 파일을 사용하여 모든 C++ 프로젝트를 컴파일하십시오. src 파일과 프로그램 이름을 변경하는 방법 외에도 Makefile을 이해할 수 없다. 인터넷에서 가져왔다.

+2

정보가 충분하지 않습니다. 우리는 TrainingProject23.cpp가 필요합니다. –

+0

흠 ... TrainingProject23는 위의 유닉스 파일을 수정할 필요가 없도록 열어 둔 파일입니다 (SRCS = TrainingProjects23을 프로젝트에서 프로젝트로 동일하게 유지해야합니다). 나는 자주 내용을 완전히 삭제하고 새로운 것을 시도하기 위해 다시 시작합니다. 나는 더 이상 내용을 가지고 있지 않지만, 내가 시도한 모든 코드는 동일한 결과를 산출한다 : 그것은 필요한 표준 라이브러리 노드가 포함되었는지 여부에 관계없이 성공적으로 실행되고 컴파일된다. – hedgehogrider

답변

5

표준 라이브러리 헤더가 다른 표준 라이브러리 헤더를 포함 할 수 있습니다 그냥 조잡합니다. 예를 들어 #include <string>; 귀하의 구현은 다른 표준 라이브러리 헤더 (예 : <algorithm>)를 포함하도록 허용됩니다 (필수는 아님). 귀하의 경우, 그 일이 일어 났을 지 모르지만, 당신이 의지해야 할 것은 아무것도 아닙니다.

+2

C++에서는 일반적으로 사실입니다 (C++ 표준 헤더를 드래그 할 수 있음).순수 표준 C에서는 그렇지 않습니다. 하나의 특정 특수한 경우를 제외하고 하나의 표준 헤더는 다른 것을 끌어들이는 것이 허용되지 않습니다 : ''은''을 포함 할 수 있습니다. POSIX에서는 일부 헤더에 다른 헤더를 포함 할 수 있습니다. –

+0

@Jonathan - 좋은 지적입니다. 하지만 그는 표준이 아닌 헤더도 가질 수있었습니다. – DVK

+0

AHA! 나는 이것을 몰랐다! 이것은 분명히 문제였습니다. 사실, 나는 당신이 제공 한 예제가 내가 알아 차린 정확한 시나리오 였을 것이라고 확신한다. 댓글을 달았습니다. – hedgehogrider

5

정확한 코드를 보지 않고서는 확실히 알기가 어렵지만 가능한 다른 옵션은 다른 헤더 파일 (주석에있는 Kristopher는 OpenGL 및/또는 GLUT를 추측합니다)을 포함한다는 것입니다. 그러면 여러분의 코드에는 ' 명시 적으로 포함하십시오.

예. 갑자기 컴파일 중지,

  • 하는 프로젝트 "my_incl.h"를 ​​포함하지 않는 경우 :

    # File: my_incl.h 
    #include <algorithm> 
    
    # File: main.c 
    #include "my_incl.h" 
    # yay - you just included the algorithm.h without even trying. 
    

    이 작동합니다,하지만에 의존하는 것은 여러 가지 이유로, 나쁜 연습 제발 , 100 % 즉시 명백한 원인없이.

  • 포함 목록에서 코드에서 사용하는 라이브러리를 빠르게 요약 할 수 있으므로 코드를 읽기/이해하기가 어려워집니다.

  • 그것은

+0

제쳐두고, 이것은 종종 골프에서 사용됩니다 : 우리가 관심있는 것을 포함하는 짧은 이름의 헤더를 포함하십시오. – marcog

+1

이것을 확장하십시오 : 아마도 OpenGL 및/또는 GLUT 헤더 파일을 포함하고 있습니다. 아마도 표준 라이브러리 헤더를 포함 할 것이다. –

+0

@marcog - C에서 골프를 치기 시작한 날 (Perl과 대조적으로) waaaaaay지만 좋은 팁을 알고, 감사합니다! – DVK

관련 문제