> php教程 > PHP开发 > 본문

extern 사용법 요약

高洛峰
풀어 주다: 2016-12-19 14:33:36
원래의
1205명이 탐색했습니다.

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_)

#define AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_00 10B503C2 EA__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) 단일 선택 [미리 컴파일된 헤더를 사용하지 않음]

(4).


위의 방법으로 문제가 해결되지 않으면 다음 내용을 읽어보세요. 이러한 오류가 발생하려면 .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 중국어 홈페이지를 참고해주세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿