반응형
Notice
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
- 파이썬
- Yes
- 딥러닝
- 자바스크립트
- 웹개발
- 프로그래밍언어
- 컴퓨터과학
- 자료구조
- 보안
- 2
- 컴퓨터공학
- 데이터분석
- 머신러닝
- 데이터베이스
- 네트워크보안
- 버전관리
- 인공지능
- 코딩
- 프로그래밍
- 사이버보안
- 알고리즘
- 데이터과학
- 네트워크
- 클라우드컴퓨팅
- 빅데이터
- 데이터구조
- I'm Sorry
- 컴퓨터비전
- 소프트웨어공학
- 소프트웨어
Archives
- Today
- Total
스택큐힙리스트
C++ 함수에서 extern 키워드. 헤더 파일을 왜 포함하지 않는 것인가요? 본문
반응형
내가 올바르게 이해한다면 이 의미는 다음과 같습니다.
extern void foo();
함수 foo가 다른 번역 단위에서 선언되었음을 의미합니다.
1) 이 함수가 선언된 헤더 파일을 #include하는 것이 왜 좋지 않은 건가요?
2) 링커는 링킹 시 함수를 어디에서 찾아야 하는지 어떻게 알까요?
편집: 아마도 위의 선언이 사용하는 함수를 따라온다는 것을 명확히 해야 할지도 모릅니다.
foo();
이 함수는 이 번역 단위에서 정의되지 않았습니다.
답변 1
1) 헤더 파일이 없을 수도 있습니다. 그러나 일반적으로 대형 프로젝트에서는 여러 개의 번역 단위가 해당 함수를 사용할 경우 헤더 파일이 있어야 합니다 (중복을 피하세요).
2) 링커는 함수 및 다른 심볼을 찾기 위해 지정된 모든 개체 파일 및 라이브러리를 검색합니다.
답변 2
C++ extern 키워드는 함수에서 사용됩니다. 왜 헤더 파일을 포함시키지 않을까요?C++에서 함수를 선언하려면 해당 함수를 헤더 파일에 정의해야 합니다. 이는 해당 함수를 여러 소스 파일에서 공유하기 위해서입니다. 하지만 때로는 헤더 파일을 포함할 필요 없이 함수를 다른 소스 파일에서도 사용할 수 있습니다.
이럴 때 extern 키워드를 사용합니다. extern을 함수 선언 앞에 붙이면 컴파일러에게 해당 함수가 다른 소스 파일에서 정의되어 있다는 것을 알려줍니다. 이렇게 함으로써 컴파일러는 해당 함수가 존재함을 알고, 링킹 단계에서 함수를 찾을 수 있습니다.
그렇다면 왜 헤더 파일을 포함시키지 않고 extern 키워드를 사용하는 걸까요? 이는 몇 가지 이유가 있습니다.
첫째, 헤더 파일을 포함하는 것은 코드 중복을 야기할 수 있습니다. 헤더 파일 안에 함수의 정의와 선언이 함께 있을 경우, 해당 헤더 파일을 여러 소스 파일에서 포함시키면 함수의 정의도 함께 중복되어 컴파일 에러가 발생할 수 있습니다.
둘째, 헤더 파일을 포함하지 않는 것은 컴파일 시간을 단축시킵니다. 헤더 파일에는 많은 정보가 들어 있을 수 있으며, 이를 포함하는 모든 소스 파일은 컴파일할 때 해당 헤더 파일을 열고 내용을 읽어와야 합니다. 이는 컴파일 시간을 증가시키고 빌드 프로세스를 느리게 만들 수 있습니다. extern을 사용하면 헤더 파일을 포함하지 않아도 되므로 컴파일 시간을 줄일 수 있습니다.
쉽게 말해, extern 키워드를 사용함으로써 함수를 다른 소스 파일에서도 사용하면서 중복된 코드를 방지하고, 빌드 속도를 향상시킬 수 있습니다.
C++에서 extern 키워드는 함수 선언에서 왜 헤더 파일을 포함시키지 않아도 되는지를 알려줍니다. 이는 코드 중복을 방지하고 컴파일 시간을 단축시킬 수 있기 때문입니다. 따라서 C++에서 extern 키워드는 헤더 파일을 포함시키지 않는 대안으로 유용하게 사용될 수 있습니다.
반응형
Comments