본문 바로가기
프로그래밍 언어/C++

[C/C++] extern 키워드

by 까망 하르방 2025. 1. 12.
반응형

[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++] [전처리기] 헤더파일(.h) 만들어서 include 하기

헤더파일(.h) 만들어서 include 하기 헤더파일(.h)에는 함수 원형이나 클래스만 선언한다.내부 구현은 별도의 파일에서 구현한다. [Calc.h]int add(int A, int B);  [Calc.cpp]#include "Calc.h"int add(int a, int b)

zoosso.tistory.com

 

 

📌 [C/C++] Header Guard 활용

 

[C/C++] Header Guard 활용

여러 파일에서 특정 헤더 파일을 #include 할 수 있다.이 경우 헤더파일이 중복 컴파일되어 에러 발생하게 된다. 그렇기에 모든 header 파일은 여러 번 포함되는 것을 방지하기 위해header guard를 가지

zoosso.tistory.com

반응형

'프로그래밍 언어 > 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

댓글