extern
소스 파일 A에 정의된 함수는 다른 소스 파일에서는 보이지 않습니다(즉, 액세스할 수 없습니다). 소스 파일 B에서 이 함수를 호출하려면 B의 헤드에 외부 선언을 추가해야 합니다.
extern function 프로토타입
이렇게 하면 소스 파일 해당 함수는 B에서도 호출할 수 있습니다.
여기서 표현의 차이에 주의하세요. A에서는 정의이고 B에서는 진술입니다. 함수는 하나의 소스 파일에서만 정의할 수 있고 반드시 정의해야 하지만, 다른 여러 소스 파일에서도 선언할 수 있습니다. 정의는 실제로 해당 엔터티를 생성하는 스토리지 할당을 발생시킵니다. 선언으로 인해 스토리지 할당이 발생하지 않습니다. 대략적으로 비유하자면, 소스 파일 B에서 선언한 후 A의 함수를 볼 수 있도록 B에서 창을 여는 것과 같습니다.
#i nclude "stdafx.h"
1.extern은 변수 선언에 자주 사용됩니다. *.c 파일에서 사용할 수 있습니다. 변수가 선언되었습니다. 이 전역 변수를 참조하려면 이를 *.h에 배치하고 extern으로 선언합니다.
2. 함수 선언에 extern 키워드가 포함되어 있으면 함수가 다른 소스 파일에 정의될 수 있다는 의미일 뿐이며 다른 효과는 없습니다. 즉, 다음 두 함수 선언 사이에는 차이가 없습니다:
extern int f() 및 int f()
============= === ==========
함수를 정의하는 c/cpp 파일이 해당 헤더 파일에 정의된 함수를 선언하는 경우 다른 c/cpp 파일에서 이 함수를 사용하려면 헤더 파일만 포함하면 됩니다.
헤더 파일을 포함하지 않으려면 c/cpp에서 함수를 선언하세요. 일반적으로 "extern"은 이 파일에 정의된 함수를 선언하는 데 사용되지 않고 "extern"은 다른 파일에 정의된 함수를 선언하는 데 사용됩니다. 이렇게 하면 이 파일에서 다른 파일에 정의된 함수를 호출할 때 필요가 없습니다. 헤더 파일을 포함하려면
include "*.h"를 사용하여 함수를 선언하고 선언 후 바로 사용할 수 있습니다.
============================================== ================================================= ================================================= ================================================= ============================== ///extern.cpp 내용은 다음과 같습니다.
//extern.cpp: 콘솔 애플리케이션의 진입점을 정의합니다.
//
#i nclude "stdafx.h"
extern print(char *p);
int main (int argc, char* argv[])
{
char *p="hello world!";
print(p);
return 0; print.cpp의 내용은 다음과 같습니다
#i nclude "stdafx.h"
#i nclude "stdio.h"
print(char *s)
{
printf(" 문자열은 %s/n",s);
}
결과적으로 프로그램이 정상적으로 실행되어 결과를 출력할 수 있습니다. "extern"을 제거해도 프로그램은 계속 정상적으로 실행될 수 있습니다.
함수 선언에서 "extern"은 해당 함수가 이 파일에 정의되어 있는지 아니면 다른 파일에 정의되어 있는지를 나타내는 데만 사용되는 것을 볼 수 있습니다. 함수를 사용하기 전에 선언했다면 헤더 파일을 포함할 필요가 없습니다.
VC++6.0에서 "미리 컴파일된 헤더 지시문을 찾는 동안 예기치 않은 파일 끝" 문제가 자주 발생합니까?
해결 방법: VC++6.0에서 자주 발생하는 "치명적인 오류 C1010: "미리 컴파일된 헤더 지시문을 찾는 동안 예기치 않은 파일 끝" 문제가 발생합니까?
모두가 VC6에 있다고 생각합니다. 0 이런 문제가 자주 발생하는데 어떻게 해결하나요?
1. ";", "}"가 빠졌는지 확인하세요
예: 클래스와 구조체 뒤에 있는 세미콜론이 깊습니다. 숨겨진 매크로 및 .h 파일의 문제는 약간의 생각이 필요합니다
2. 클래스의 일부 정의가 삭제되었을 것입니다. 예, 다음과 같습니다. :
.h:
#if !define(AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_)
.......
//{{AFX_INSERT_LOCATION}}
// 마이크로소프트 Visual C++에서는 이전 줄 바로 앞에 추가 선언을 삽입합니다.
#endif // !definated(AFX_MAINFRM_H__54CA89DB_BA94_11D4_94D7_0010B503C2EA__INCLUDED_)
3. 헤더
에 #i nclude "stdafx.h"를 추가합니다. 4. CPP 파일의 첫 번째 줄에 #i nclude "stdafx.h"를 추가하거나 모두 다시 빌드합니다.
5.
(1) [프로젝트] - [설정] - [C/C++] - [카테고리]
(2) [미리 컴파일된 헤더]를 선택합니다. (3) 단일 선택 [미리 컴파일된 헤더를 사용하지 않음]
위의 방법으로 문제가 해결되지 않으면 다음 내용을 읽어보세요. 이러한 오류가 발생하려면 .H 및 .CPP 파일을 추가했을 가능성이 있습니다.
이름에 "stdafx.h"가 포함되어 있습니다. 여러 파일에서 동시에 구조 유형을 사용하려면 계속 읽어야 합니다.
type 정의는 유형 변수의 정의와 다릅니다.
유형 정의는 유형을 설명할 뿐이고
는 컴파일러가 볼 수 있으며
은 실행 가능한 코드를 생성하지 않습니다.
변수 정의는 실행 파일에 이러한 내용이 실제로 존재하는 것을 말합니다.
.c마다 타입 정의를 명확하게 작성하는 것이 번거롭기 때문에
일반적으로 .h
에 타입 정의를 작성하고, .c에서는 간단한 작성 방법을 사용합니다. , 예를 들어 struct A a;
이와 같이 변수를 정의하면
전체 유형 설명을 다시 작성할 필요가 없습니다.
------------------------------- --- ---------------
따라서 구조체 유형 정의는 XX.h에 배치되고
XX.cpp가 추가됩니다.
XXXXX.cpp plus #i nclude "XX.h"
그런 다음 extern을 직접 사용합니다. struct str st_r; extern 사용법은 PHP 중국어 홈페이지를 참고해주세요!