다음은 C 언어의 외종 키워드에 대한 몇 가지 중요한 점입니다, 마지막 해결책은 정말 내가 선호하는 것입니다 (나는 첫 번째와 잘 오전을 통해). 나는 수년에 걸쳐 한 가지를 배운 경우, 다음이 : 개발자에게 시스템에 대한 뭔가를 잊고하여 버그를 만들 수있는 기회를 주고 그는 그것을 할 것입니다. 개발자가 모든 주위에 외적 «C»를 포함하도록 강요하는 것은 C 라이브러리에서 온 것으로 생각되는 것을 보장합니다. C++ 프로그램에서 사용할 수 있는 C 헤더에 이 두 블록을 추가해야 합니다. C 헤더는 서로 를 포함할 수 있으며 컴파일러는 여러 중첩 된 수준의 외주 «C»를 발생해도 괜찮지만 많은 소음이 발생합니다. 1. 선언은 여러 번 수행 할 수 있지만 정의는 한 번만 수행 할 수 있습니다. 2. «extern» 키워드는 변수/함수()의 가시성을 확장하는 데 사용됩니다. 3.
기능은 기본적으로 프로그램 전체에 걸쳐 볼 수 있기 때문에. 함수 선언/정의에는 외각을 사용할 필요가 없습니다. 그것의 사용은 중복됩니다. 4. 외부 변수와 함께 외향적 인 경우 정의되지 않은 선언만 선언됩니다. 5. 예외로, 외부 변수가 초기화와 함께 선언될 때, 그것은 또한 변수의 정의로 취합니다. 외종 «C»를 사용하는 방법에 대한 이전 두 FAQ를 참조하십시오. 함수 hello는 hello.cppas extern «C»에 정의되어 있습니다. dlsym 호출이 있는 main.cpp에 로드됩니다. 그렇지 않으면 기호 이름을 알 수 없기 때문에 함수는 외형 «C»로 정규화되어야합니다. 이제 두 번째 및 마지막 경우 즉 C 변수가있는 외부 사례를 사용합시다.
나는 Extern이 기본적으로 C 함수로 존재하는 이전 사례보다 더 흥미롭고 유익하다고 느낍니다. 그래서 내가 질문을 하자, 어떻게 그것을 정의 하지 않고 C 변수를 선언 할 것 이다? 여러분 중 많은 사람들이 사소한 것을 볼 수 있지만 C 변수가있는 외부 를 이해하는 것은 중요한 질문입니다. 대답은 다음과 같습니다. C에서 오버로드된 함수를 호출하려면 C 코드가 사용할 고유한 이름을 래퍼에 제공해야 합니다. 예를 들어 C 함수의 정의와 마찬가지입니다(C 함수의 정의는 함수본문을 작성하는 것을 의미합니다). 따라서 C 함수를 정의할 때마다 함수 정의의 시작 부분에 extern이 있습니다. 선언은 여러 번 수행 할 수 있고 정의는 한 번만 수행 할 수 있으므로 함수 선언을 여러 C / H 파일 또는 단일 C / H 파일에 여러 번 추가 할 수 있음을 알 수 있습니다. 그러나 함수의 실제 정의는 한 번만 알 수 있습니다(예: 한 파일에만). 그리고 외향성이 전체 프로그램에 대한 가시성을 확장함에 따라 함수의 선언이 알려진 경우 전체 프로그램의 모든 파일에서 어디서나 함수를 사용할 수 있습니다(호출). (함수의 선언을 알면 C 컴파일러는 함수의 정의가 존재하고 프로그램을 컴파일하기 위해 진행된다는 것을 알고 있습니다.) 그래서 C 함수가있는 외지에 관한 것입니다. 다음은 C 함수의 외종 변수를 C 함수 extern «C»(C++ 코드에서)로 선언하고 C 또는 C ++ 코드에서 호출하는 예입니다. 예를 들어: 동의하지 않습니다.
내 C 헤더는 일반적으로 C 표준 라이브러리 헤더 또는 이와 유사한 것을 포함하지 않습니다. API 헤더에서 이 작업을 수행하는 C 라이브러리는 수정없이 C++ 코드에서 사용할 수 없습니다. 즉, 이러한 헤더의 작성자는 C++-land에서 재사용할 수 있도록 명시적으로 준비해야 합니다. 그들은 다음 #ifdef 넣어 선택의 여지가 … extern «C» 모든 곳에서 또는 기본값을 돌리십시오: C++ 코드에서 다르게 동작하는 헤더를 사용하는 경우 __cpluplus / extern «C++»#ifdef 를 사용하여 다른 동작을 보호하여 C++ 재사용을 위해 C API를 준비합니다. 외부 변수를 전역 변수라고도 합니다. 이러한 변수는 함수 외부에 정의됩니다. 이러한 변수는 함수 실행 전체에서 전역적으로 사용할 수 있습니다.