extern用法總結!


 

extern

   在源文件A里定義的函數,在其他源文件中是看不見的(即不能訪問)。為了在源文件B里能調用這個函數,應該在B的頭部加上一個外部聲明:

   
  extern  
函數原型;   


 
這樣,在源文件B里也能夠調用那個函數了。  
 
注意這里的用詞差別:在A里是定義,在B里是聲明。一個函數僅僅能(也必須)在一個源文件中被定義,可是能夠在其他多個源文件中被聲明。定義引起存儲分配,是真正產生那個實體。而聲明並不引起存儲分配。打一個粗俗的例如:在源文件B里聲明后,好比在B里開了一扇窗,讓它能夠看到A里的那個函數。

 

i nclude "stdafx.h"


  1.extern用在變量聲明中經常有這樣一個作用,你在*.c文件里聲明了一個全局的變量,這個全局的變量假設要被引用,就放在*.h中並用extern來聲明。

  2.假設函數的聲明中帶有keywordextern,僅僅是暗示這個函數可能在別的源文件里定義,沒有其它作用。即下述兩個函數聲明沒有差別:
  extern int f(); int f();
  ================================

  假設定義函數的c/cpp文件在相應的頭文件里聲明了定義的函數,那么在其它c/cpp文件里要使用這些函數,僅僅須要包括這個頭文件就可以。
  假設你不想包括頭文件,那么在c/cpp中聲明該函數。一般來說,聲明定義在本文件的函數不用“extern”,聲明定義在其它文件里的函數用“extern”,這樣在本文件里調用別的文件定義的函數就不用包括頭文件
  include “*.h”來聲明函數,聲明后直接使用就可以。
  ================================
  舉個樣例:
  //extern.cpp內容例如以下:
  
  // extern.cpp : Defines the entry point for the console application.
  
//
  

  #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("The string is %s/n",s);
  
}
  

  結果程序能夠正常執行,輸出結果。假設把“extern”去掉,程序依舊能夠正常執行。
  
  由此可見,“extern”在函數聲明中可有可無,僅僅是用來標志該函數在本文件里定義,還是在別的文件里定義。僅僅要你函數在使用之前聲明了,那么就能夠不用包括頭文件了。
  
    VC++6.0
中常出現的"unexpected end of file while looking for precompiled header directive"的問題?

    怎樣解決:"fatal error C1010:VC++6.0中常出現的"unexpected end of file while looking for precompiled header directive"的問題?

    我想大家在VC6.0中常常回遇到這種問題,怎樣解決呢?

 1、看看是否缺少“}”  
 
如:類,結構體后面的分號

 
隱藏得深的是宏、.h文件的問題就要費點心思了

 2、一定是你在類的部分定義被刪除了,M$在每一個類中定義一些特殊的常量,是成對的,例如以下:
 .h:
 #if !defined(AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_)
 #define AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_
 .......
 //{{AFX_INSERT_LOCATION}}
 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.

 #endif // !defined(AFX_MAINFRM_H__54CA89DB_BA94_11D4_94D7_0010B503C2EA__INCLUDED_) 


 
你能夠新建一個類,然后把這些拷貝過去或補上就能夠了。  
 3
、在頭部添� #i nclude "stdafx.h"

 4、在CPP文件第一行加上#i nclude "stdafx.h"
 
或者Rebuild All. 

 5

 1. [Project] - [Settings] - [C/C++] - [Category]
 
2. 選擇
[Precomplied Headers]
 
3. 單選
[Not Using Precomplied Headers]
 
4. [OK]


 
假設以上不能解決這個問題,那么就請看下面內容.引起這種錯誤,有可能你僅僅是添加�了一個.H.CPP的文件.這時你就要按上面所說.
名含"stdafx.h"就可以.假設還要在多個文件中同一時候使用結構類型,你就要繼續向下看了.一定會有不少收獲的.

 類型的定義和類型變量的定義不同,
 
類型定義僅僅是描寫敘述一個類型,

 
是給編譯器看的,

 
不會產生可運行代碼。

 
變量定義是指在運行文件里真實得存在這么一塊內容。

 由於每一個.c里都要寫清楚類型定義非常麻煩,
 
所以一般都把類型定義寫在.h

 
,而在.c里採用簡單的寫法,如
struct A a;
 
這樣定義變量,

 
不需把整個類型的描寫敘述再寫一遍。

 ------------------------------------------------------------------------
 
所以,struct類型定義放到 XX.h里面,
 XX.cpp
里加struct str st_r

 XXXXX.cpp
加上#
i nclude "XX.h"
 
然后直接使用extern struct str st_r;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM