首頁  >  文章  >  php教程  >  extern使用方法總結

extern使用方法總結

高洛峰
高洛峰原創
2016-12-19 14:33:361202瀏覽

extern

   在來源檔案A裡定義的函數,在其它原始檔案裡是看不見的(即不能存取)。為了在原始檔B裡能呼叫這個函數,應該在B的頭部加上一個外部聲明:

   
  extern   函數原型;    


  這樣,並在該源文件B裡調用源函數了。   
  注意這裡的用詞區別:在A裡是定義,在B裡是聲明。一個函數只能(也必須)在一個原始檔裡被定義,但是可以在其它多個來源檔案裡被宣告。定義引起儲存分配,是真正產生那個實體。而聲明並不會引起儲存分配。打一個粗俗的比方:在來源檔B裡聲明後,好比在B裡開了一扇窗,讓它可以看到A裡的那個函數。

 

#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 : Defines the entry point for the console application.
  //
  
   i nclude "stdafx.h"
 總,   㟇p.
{
   char *p="hello world!";
   print(p);
   return 0;
  }
 //print. clude "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"的問題?

    如何解決呢?
 2、一定是你在類別的部分定義被刪除了,M$在每個類別中定義一些特殊的常數,是成對的,如下: 

 .h: 

 #if #define AFX_CHILDFRM_H__54CA89DD_BA94_11D4_94D7_0010B503C2EA__INCLUDED_ 

 ....... 

 //{{AFX_INSERT_LOCATION}} ....... 

 //{{AFX_INSERT_LOCATION}} ....... 

 //{{AFX_INSERT_LOCATION}} ....... 
 //{{AFX_INSERT_LOCATION}} ..

 #endif // !defined(AFX_MAINFRM_H__54CA89DB_BA94_11D4_94D7_0010B503C2EA__INCLUDED_) 



 一個類,然後把這些拷貝過去或補上就可以了。 。 [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;



更多extern使用方法總結相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn