링크(소프트웨어)
Linkage (software)프로그래밍 언어, 특히 C, C++, D와 같은 컴파일된 언어에서 링크는 프로그램 전체 또는 단일 변환 단위 전체에서 이름이 동일한 엔티티를 참조할 수 있는지 여부를 기술합니다.
이 키워드는 C에서 함수 또는 변수의 변환 유닛에 대한 가시성을 제한하기 위해 사용됩니다.이것은 C++에서도 유효합니다.(C++98/03에서는 익명 네임스페이스로 이 사용이 폐지되었지만 C++ 11에서는 폐지되었습니다.)또, C++는 암묵적으로, 다음의 어느쪽인가를 취급합니다.const
명시적으로 선언되지 않는 한 내부 링크가 있는 네임스페이스 변수extern
C와는 달리.
이름의 연결은 해당 범위와 관련이 있지만 그 범위와는 다릅니다.이름의 범위는 변환 유닛에서 이름이 표시되는 부분입니다.예를 들어 글로벌스코프의 이름(C의 파일스코프와 동일하고 C++의 글로벌네임스페이스 스코프와 동일)이 파일의 어느 부분에나 표시됩니다.그 이름은 외부 링크인지 내부 링크인지에 관계없이 번역 유닛의 마지막 부분에서 범위가 종료됩니다.
이름에 외부 링크가 있는 경우, 이름이 나타내는 엔티티는 같은 이름에 대한 고유 선언을 사용하여 다른 변환 단위에서 참조할 수 있으며, 다른 선언을 사용하여 같은 변환 단위 내의 다른 범위에서 참조할 수 있습니다.명칭에 내부연계가 주어진다면, 그러한 선언은 비록 같은 이름을 사용하지만, 동일한 변환단위 내에서 구별되는 선언에 의해 참조될 수 있다.링크가 전혀 없는 이름은 다른 범위의 선언에서 참조할 수 없습니다.또, 같은 변환 유닛내에서도 참조할 수 없습니다.이러한 이름의 예로는 함수 및 로컬 변수의 매개 변수가 있습니다.자세한 내용은 C(유형이 아닌 개체와 함수에만 링크가 있음)와 C++ 및 이 단순화된 개요 간에 다릅니다.
언어마다 외부 기호를 다르게 장식하기 때문에 언어 간의 연계는 어느 정도 주의를 기울여야 합니다.일반적인 관용구는 다음과 같이 사용한다.extern "C"
C++와 C 코드를 링크합니다.
C의 링크
ISO/IEC 9899에서 인용한 'linkage'의 정의:TC3(C99 Standard).C는 이 문서에서 "이름"을 사용하는 경우 "식별자"라는 용어를 사용합니다(이 중 후자는 C++가 링크를 공식화하기 위해 사용하는 것입니다).
다른 스코프 또는 같은 스코프에서 여러 번 선언된 식별자는 [1]링크라고 불리는 프로세스에 의해 동일한 오브젝트 또는 함수를 참조하도록 할 수 있습니다.
다음으로 링크의 일반적인 예를 제시하겠습니다.
/* 파일 데모 1.c */ /* 외부 */ 무효 후우(무효); /* 외부 옵션 - 기본 */ 인트 주된(무효) { 후우(); 돌아가다 0; }
/* 파일 데모 2.c */ 무효 후우(무효) { ... }
기능.foo
는 2개의 파일로 선언되며 기능 본문은 에서 정의되어 있습니다.demo2.c
. 링크를 통해,foo
호출했다main()
안에서.demo1.c
을 참조하다foo
에demo2.c
함수에 대한 외부 링크의 예입니다.
「 」를 참조해 주세요.
- 응용 프로그램 바이너리 인터페이스(ABI)
- C와 C++의 호환성
- 링커(컴퓨팅)
- 이름 망글링
레퍼런스
- ^ ISO/IEC 9899기술적 교정 및 근거를 포함한 공식 C99 문서.2007년 현재 이 표준의 최신 버전은 다음과 같습니다. "ISO/IEC 9899:TC3" (PDF).(3.61 MiB)