ODR(5)
-
C++의 링크 유형 (Linkage) - 10. 요약 및 결론
✅ 10. 요약 및 결론🔹 1) 각 링크 유형 요약 표링크 유형외부 접근적용 대상대표 키워드특징 요약External Linkage✅전역 변수, 함수, inline 변수 (C++17~)extern, inline여러 파일에서 공유 가능Internal Linkage❌static 변수/함수, anonymous namespace, const 전역 변수 (C++17 이전)static, namespace {}파일 내 전용, 정보 은닉No Linkage❌지역 변수, 함수 인자, 클래스 멤버없음블록/클래스 내부에서만 유효🔹 2) 실무에서 자주 쓰이는 패턴 정리목적패턴설명전역 변수 사용 최소화static 또는 class 내부에 선언외부 노출 제한, 유지 보수 용이여러 파일에서 상수 공유inline const (C++1..
2025.03.27 -
C++의 링크 유형 (Linkage) - 8. 실전 예제와 사례 분석
✅ 8. 실전 예제와 사례 분석🔹 [예제 1] 외부 링크 변수와 함수 정의 분리 예시📁 config.h – 선언만 작성#ifndef CONFIG_H#define CONFIG_Hextern int globalSetting; // 외부 선언void printSetting(); // 함수 선언#endif📁 config.cpp – 정의 작성#include "config.h"#include int globalSetting = 42; // 외부 링크 정의void printSetting() { std::cout 📁 main.cpp#include "config.h"int main() { printSetting(); // 다른 파일에 정의된 함수 사용 retu..
2025.03.27 -
C++의 링크 유형 (Linkage) - 7. 링키지와 이름 충돌 (Name Collision)
✅ 7. 링키지와 이름 충돌 (Name Collision)🔹 동일한 이름의 변수 또는 함수가 여러 파일에 있을 경우링키지가 External일 때,여러 소스 파일에서 동일한 이름의 전역 변수나 함수를 정의하면 링커 단계에서 충돌이 발생합니다.📌 예시 – 이름 충돌 발생:// a.cppint config = 1; // External Linkage// b.cppint config = 2; // ❌ 충돌: "multiple definition of `config`"→ 링커는 프로그램 전체에서 config가 하나만 있어야 한다는 ODR(One Definition Rule)에 따라 오류를 발생시킴.🔹 내부 링크(Internal Linkage)와 외부 링크(External Linkage)의 이름 관리 ..
2025.03.27 -
C++의 링크 유형 (Linkage) - 3. External Linkage (외부 링크)
✅ 3. External Linkage (외부 링크)🔹 개념 및 특징External Linkage란,하나의 식별자(변수 또는 함수)가 여러 번역 단위(소스 파일)에서 동일한 이름으로 참조될 수 있는 링크 특성을 말합니다.다른 소스 파일에서도 접근 가능프로그램 전체에서 하나의 엔티티로 공유전역 변수 및 함수는 기본적으로 external linkage를 가짐ODR(One Definition Rule) 준수가 반드시 필요🔹 적용 대상전역 변수전역 함수extern 키워드로 선언된 식별자C++17 이후: inline 변수도 External Linkage를 가짐🔹 extern 키워드의 의미와 사용법extern은 “정의는 다른 곳에 있다”는 것을 컴파일러에게 알려주는 선언용 키워드입니다.헤더 파일에는 주로 ex..
2025.03.27 -
C++의 링크 유형 (Linkage) - 1. 링키지(Linkage)란?
✅ 1. 링키지(Linkage)란?🔸 링키지의 정의링키지(Linkage)는 C++에서 하나의 식별자(변수나 함수 등)가 여러 번역 단위(translation unit)에서 같은 엔티티로 인식될 수 있는지 여부를 결정하는 개념입니다.링키지는 코드의 파일 간 연결 여부를 다루며,특히 전역 변수나 함수처럼 파일 간 공유가 필요한 식별자에서 중요하게 작용합니다.📌 번역 단위(Translation Unit)란?하나의 .cpp 소스 파일과 그 안에서 #include로 포함된 모든 헤더 파일을 컴파일한 결과입니다.C++에서는 각 .cpp 파일이 독립적인 번역 단위로 처리됩니다.🔸 링키지와 스코프(Scope)의 차이항목설명스코프(Scope)이름이 유효한 코드의 범위를 결정(예: 블록, 함수, 전역 등)링키지(Li..
2025.03.27