Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- LIST
- 핑거스타일
- label
- 프로그래머스
- Linux
- pandas
- 명령어
- 채보
- ubuntu
- JSON
- C#
- SSH
- Selenium
- C
- windows forms
- OpenCV
- pytorch
- 오류
- mysql
- C++
- VS Code
- error
- Python
- 기타 연주
- Docker
- pip
- paramiko
- Visual Studio
- Numpy
- YOLO
Archives
- Today
- Total
기계는 거짓말하지 않는다
#ifdef __cplusplus 매크로의 의미 본문
C++에서 헤더파일이나 소스코드에 다음과 같은 매크로를 사용할 수 있다.
#ifdef __cplusplus
extern "C" {
#endif
// functions...
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus와 extern "C"를 사용한 위 구문은 C++ 코드에서
C 스타일의 함수 인터페이스를 사용하도록 하기 위한 것이다.
이 구문은 C++ 컴파일러와 C 컴파일러 간의 링크 호환성을 유지하는 데 사용된다.
#ifdef __cplusplus
위 매크로의 의미는 C++ 코드가 컴파일되고 있음을 나타낸다.
#ifdef __cplusplus는 C++ 컴파일러에서만 이 구문 내부의 코드를 실행하라는 의미이다.
extern "C"
extern "C"는 C++ 컴파일러에 이 블록 내의 함수 선언이 C 함수라는 것을 알려준다.
이는 함수 이름의 매핑 방식을 C 방식으로 변경하여, C와 C++ 간의 링크 호환성을 유지할 수 있게 한다.
C++에서는 함수 오버로딩을 지원하기 위해 함수 이름을 맹글링(name mangling)한다.
그러나 C에서는 함수 이름을 맹글링하지 않기 때문에 extern "C"를 사용하면
C++ 컴파일러가 이 블록 내의 함수 이름을 맹글링하지 않게 된다.
Summary
이 매크로 구문은 헤더 파일을 C와 C++ 양쪽에서 사용할 수 있도록 하기 위한 것이다.
C++에서 이 헤더 파일을 포함할 때 C 스타일의 함수 인터페이스를 제공하여
함수 이름 맹글링 문제를 방지하고, C와 C++ 간의 링크 호환성을 유지할 수 있게 한다.
C 컴파일러에서는 __cplusplus 매크로가 정의되지 않으므로 extern "C" 블록이 무시되고,
C++ 컴파일러에서는 이 블록이 활성화되어 함수 이름 맹글링이 방지된다.
'C++' 카테고리의 다른 글
C++ 문자열에서 JSON 데이터 파싱(parsing) (0) | 2024.07.30 |
---|---|
깊은 복사 / 얕은 복사 (0) | 2021.05.18 |
vector, priority_queue 정렬 비교 (0) | 2021.05.11 |
Comments