.h 와.cpp 파일 의 차이 점(zt)상세 소개

2249 단어 .h.cpp
VC++의 개발 에 막 접 촉 했 기 때문에 C++의 원리 적 인 것들 을 파악 해 야 한다.특히 원본 파일 과 헤더 파일 의 개념 에 대해 깊이 알 아야 합 니 다.헤더 파일 과 원본 파일 의 구분 에 대해 먼저,우 리 는 모든 것 을 하나의.cpp 파일 에 넣 을 수 있 습 니 다.그리고 컴 파일 러 는 이.cpp 를.obj 로 컴 파일 합 니 다.obj 는 무엇 입 니까?컴 파일 유닛 입 니 다.하나의 프로그램 은 하나의 컴 파일 유닛 으로 구성 할 수도 있 고 여러 개의 컴 파일 유닛 으로 구성 할 수도 있 습 니 다.원본 코드 를 읽 기 어렵 게 만 들 고 싶 지 않다 면 여러 개의 컴 파일 유닛 을 사용 하 십시오.(한 함 수 는 두 개의 컴 파일 유닛 에 넣 을 수 없 지만 두 개 이상 은 각각 한 단원 에 넣 을 수 있 습 니 다.즉,cpp 에서)그러면 하나의.cpp 가 하나의.obj 에 대응 한 다음 에 모든 obj 를 연결 합 니 다(링크 기 라 는 프로그램 을 통 해).exe,즉 프로그램 을 구성 합 니 다.만약 에.cpp 가 다른.cpp 가 정의 하 는 함 수 를 사용 하려 면 어떻게 합 니까?이.cpp 종 에 그의 함수 성명 만 쓰 면 됩 니 다.나머지 작업 은 링크 기 가 도와 드 리 겠 습 니 다.이 함 수 를 마음대로 호출 할 수 있 습 니 다.링크 기 는 모든 obj 를 연결 하지만 우연히 같은 함수 나 외부 변 수 를 가지 고 있다 면 어떻게 합 니까?그 는 어떻게 식별 합 니까?일반적으로 같은 프로그램 에서 두 개의 같은 함수 명 이나 외부 변수 명 이 나타 나 는 것 을 허용 할 수 없습니다.그러나 다행 인 것 은 c++는 링크 속성 이라는 키 워드 를 통 해 한정 할 수 있 습 니 다.이 함 수 는 전체 프로그램 이 공용 으로 사용 하 는 것 입 니까?아니면 하나의 컴 파일 유닛 obj 에서 만 사용 하 는 것 입 니까?이 키 워드 는 extern 과 static 입 니 다.extern 은 외부 링크 라 는 뜻 입 니 다.즉,이 단원 을 제외 하고 외부 단원 도 이 함수 에 접근 할 수 있 습 니 다.static 는 내부 링크 로 자신의 단원 에 속 합 니 다.이렇게 오래 말 했 는데 도'h 의 역할'이 라 고 말 하지 않 았 습 니까?사실은.h 가 없어 도 좋 은 일 을 할 수 있 습 니 다.그러나 외부 링크 의 함수 나 외부 변 수 를 발견 하면 많은 성명 이 필요 합 니 다.c++라 는 언어 는 함수 와 변 수 를 사용 할 때 반드시 그 를 성명 해 야 합 니 다.왜 성명 해 야 합 니까?성명 을 한 후에 야 그의 규격 을 알 게 되 었 고 규격 에 맞지 않 는 부분 을 더욱 잘 발견 할 수 있 습 니 다.컴 파일 단원 을 망상 하지 마 세 요.다른 컴 파일 단원 으로 부터 자동 으로 어떤 정 보 를 얻 을 수 있 는 지,당신 이 이 함 수 를 어떻게 정의 하 는 지 알 수 있 습 니 다.그래서 이 함수 의 단원 을 사용 하기 만 하면 반드시 그.cpp 에 성명 을 써 야 합 니 다.이렇게 하 는 것 은 매우 번 거 롭 지 않 습 니까?그리고 수정 하려 면,하나의 수정 이 필요 합 니 다.이것 은 정말 견 딜 수 없습니다.h 는 바로 이 문 제 를 해결 하기 위해 태 어 났 습 니 다.그 는 이러한 공공 적 인 것 을 포함 하고 있 습 니 다.그리고 이 함 수 를 사용 해 야 하 는 모든.cpp 는\#include 로 포함 시 키 면 됩 니 다.이후 에 수정 이 필요 하고 내용 만 수정 해 야 합 니 다.h,h 안에 코드 를 쓰 지 마 십시오.h 는.cpp 의 창고 가 아 닙 니 다.모든 것 을 안에 넣 습 니 다.코드 를 쓰 면 다른.cpp 가 그 를 포함 할 때 함수 func(){printf}와 같은 중복 정의 가 발생 합 니 다.헤더 파일 a.h 에 넣 고 a.cpp 에 필요 한 성명 등 이 있 습 니 다.그리고 b.cpp 에 a.cpp 의 함 수 를 사용 해 야 한 다 는 것 을 알 게 되 어 기 쁩 니 다.\#include 는 신청 명령 이 아 닙 니 다.그 는 지정 한 파일 의 내용 을 그대로 복사 합 니 다.이때 실제로 a.cpp 와 b.cpp 는 모두 func()함수 의 정 의 를 가지 고 있 습 니 다.이 함수 가 내부 링크 static 이 라면 다행 입 니 다.공간 을 낭비 하 였 습 니 다.extern 이 라면 외부 링크(이것 은 기본 상황)는 같은 프로그램 에서 같은 이름 함수 가 나타 나 지 말 라 는 요구 에 따라 커 넥 터 는 연결 오 류 를 인정 하지 않 습 니 다!

좋은 웹페이지 즐겨찾기