반응형
[main.cpp] ← [func.h] + [func.c]
main.cpp에서 func.h 헤더파일을
아래와 같은 형태로 include 한다면 Error 발생한다.
[func.h]
int harbang(int);
[func.c]
int harbang(int x)
{
return x * x;
}
[main.cpp]
#include "func.h"
int main()
{
int r = harbang(5);
}
Q) Why Error ?
컴파일러는 확장자에 따라 언어를 결정한다.
그렇기에 각 파일별로 컴파일 후 생성된 .obj 파일을 링커로 결합한다.
즉, C와 CPP 컴파일하였을 때 name mangling으로 함수를 제대로 찾지 못한다.
[해결 방법 ①] extern 키워드
cpp 파일에게 C언어로 작성된 것이라고 알려주어야 한다.
func.h 파일에 extern "C" 표기
extern "C"
int harbang(int);
[해결 방법 ②] 조건부 컴파일
만약 새로운 .c 파일에서 func.h 사용하려면
extern "C" 사용하면 안된다.
(C 컴파일러는 extern 키워드를 알지 못한다.)
.cpp 파일에서는 extern 키워드가 필요하고
.c 파일에서는 extern 키워드가 필요하지 않다.
→ 하나의 헤더 파일을 C/C++ 모두 사용할 수 있게 해야 한다.
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int harbang(int);
#ifdef __cplusplus
}
#endif
📌 [전처리기] 헤더파일(.h) 만들어서 include 하기
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 함수 삭제 function delete (0) | 2025.01.14 |
---|---|
[C++] STL capacity와 size 함수 차이 (1) | 2025.01.13 |
[C/C++] 함수 template (0) | 2025.01.11 |
[C/C++] 문자열 String (0) | 2025.01.10 |
[C++] [STL] Vector 사용 방법 (0) | 2025.01.09 |
댓글