㈠ c語言全局變數可聲明什麼
如果static和extern都沒有,表示定義一個全局變數,其作用域限制在從定義開始到當前文件結尾。
static的作用是將全局變數的作用域限制在從定義開始到當前文件結尾,且其他文件不可以用extern來讓這個變數可見。
extern的作用是聲明一個已經在別處定義了的全局變數,它不是重新定義新的全局變數,而是起到擴展全局變數作用域的作用。
a.c:
int i; //定義i變數,且可用extern去擴展它的范圍
static int j; //定義j變數,用static限定j只能在本文件內使用
b.c
extern int i; //正確,將i的作用域延伸到b.c中
extern int j; //錯誤,因為j在定義時被static限定
㈡ C語言中用來聲明變數的詞有哪些
沒有leap這個關鍵字,是某個變數名而已。
引用聲明不會申請內存,定義會申請內存。
聲明可以多次,定義只能一次。
變數通常聲明就是定義。
比如int a;這是定義一個變數,值為隨機值。
int a=0;這也是定義一個變數,值為0。
另外在定義的時候還可以加static來定義靜態變數,比如static int a=0;
用static定義局部靜態變數可以不被自動釋放,且只定義並初始化一次。
用static定義全局靜態變數只在定義它的源文件有效,其它源文件無法訪問。
至於你說的單純聲明變數(引用性聲明),是指extern關鍵字,比如extern int a;來聲明這個變數是外部文件的。
㈢ c語言里的聲明有什麼用(詳解必采)
c語言中聲明和定義的區別
之前一直搞不清楚聲明和定義的區別,直到看了stackoverflow上的一篇文章。看完之後,頗有所得,整理如下。希望能幫到還在困惑的童鞋。
方法/步驟
聲明(declaration )指定了一個變數的標識符,用來描述變數的類型,是類型還是對象,或者函數等。聲明,用於編譯器(compiler)識別變數名所引用的實體。以下這些就是聲明:
extern int bar;
extern int g(int, int);
double f(int, double); // 對於函數聲明,extern關鍵字是可以省略的。
class foo; // 類的聲明,前面是不能加class的。
定義是對聲明的實現或者實例化。連接器(linker)需要它(定義)來引用內存實體。與上面的聲明相應的定義如下:
int bar;
int g(int lhs, int rhs) {return lhs*rhs;}
double f(int i, double d) {return i+d;}
class foo {};// foo 這里已經擁有自己的內存了,對照上面兩個函數,你就應該明白{}的用處了吧?
無論如何,定義 操作是只能做一次的。如果你忘了定義一些你已經聲明過的變數,或者在某些地方被引用到的變數,那麼,連接器linker是不知道這些引用該連接到那塊內存上的。然後就會報missing symbols 這樣的錯誤。如果你定義變數超過一次,連接器是不知道把引用和哪塊內存連接,然後就會報 plicated symbols這樣的錯誤了。以上的symbols其實就是指定義後的變數名,也就是其標識的內存塊。
4
總結
如果只是為了給編譯器提供引用標識,讓編譯器能夠知道有這個引用,能用這個引用來引用某個實體(但沒有為實體分配具體內存塊的過程)是為聲明。如果該操作能夠為引用指定一塊特定的內存,使得該引用能夠在link階段唯一正確地對應一塊內存,這樣的操作是為定義。
5
聲明是為了讓編譯器正確處理對聲明變數和函數的引用。定義是一個給變數分配內存的過程,或者是說明一個函數具體干什麼用。
㈣ 請問C語言中所謂的函數聲明是指什麼為什麼要進行聲明什麼叫做函數聲明
舉個例子來說明吧
void foo();
int main()
{
foo();
}
void foo()
{
;
}
以上代碼中,第一句就是所謂函數聲明。
其實直接用函數定義也就是void foo(){;}替代第一句也是可以的,不過函數的聲明讓你可以在定義它的代碼段之前使用它。
比如以上的例子中,在編譯進行到main函數中的foo調用的時候,foo函數還是沒有定義的,但我們通過foo的聲明告訴了編譯器:foo是一個函數的名字,這個函數有著怎樣怎樣的參數表等等。
㈤ 在C語言中,什麼是聲明、定義、初始化有什麼區別
1.聲明和定義是針對函數的概念:
包含函數實現的叫做函數的定義,一般位於.c文件中,如:
int func(int a){return a+1;}
不包含函數實現,只包含函數名的叫做函數的聲明,一般位於.h文件中。如:
int func(int a);
2.定義和初始化是針對變數的概念:
int a;就是變數的定義
a=0;就是變數的初始化
㈥ C語言中的函數聲明是什麼
函數聲明是讓代碼調用點知道按照什麼格式來調用函數。
(函數參數列表是什麼,返回值是什麼。)
否則調用點無法確知調用函數的格式。
(註:在C里也可以無函數聲明就調用,那樣會在程序鏈接的時候做調用匹配檢查。但這非常非常不推薦這樣做。
C++則完全屏蔽這種可能,如果出現未聲明的調用,則直接編譯報錯。)
㈦ 數據結構c語言那些函數的聲明怎麼寫
int add(int x, int y); //這就是函數聲明
int main(void)
{
........
}
int add(int x, int y) //函數定義
{
........
}
㈧ 關於c語言的函數聲明
因為函數jiec()是你自己定義並編輯的,在C語言中凡是操作員自己定義的函數都要在使用前申明,在C語言中系統自帶的函數是通過include語句進行引用定義的,比如字元函數通過include<string.h>進行申明,即你要引用的字元函數都在string.h里定義了
㈨ C語言里聲明是什麼意思
什麼是聲明:有兩重含義,如下:
第一重含義:告訴編譯器,這個名字已經匹配到一塊內存上了(伊人已嫁,吾將何去何
從?何以解憂,唯有稀粥),下面的代碼用到變數或對象是在別的地方定義的.聲明可以出
現多次.
第二重含義:告訴編譯器,我這個名字我先預定了,別的地方再也不能用它來作為變數
名或對象名.比如你在圖書館自習室的某個座位上放了一本書,表明這個座位已經有人預
訂,別人再也不允許使用這個座位.其實這個時候你本人並沒有坐在這個座位上.這種聲
明最典型的例子就是函數參數的聲明,例如:
void fun(int i, char c);好,這樣一解釋,我們可以很清楚的判斷:a)是定義;b)是聲明.
㈩ c語言種函數的聲明和定義分別是什麼
從C語言編譯器的角度來看,函數聲明只是一種協議,它告訴了調用者在調用這個函數之前需要給他什麼參數,一般參數是通過寄存器或者壓棧的方式傳給被調用函數的,具體這些參數如何使用以及返回什麼值到相應的寄存器里返回給調用者則是定義所描述的。