欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中定義與聲明有哪些區(qū)別

 更新時(shí)間:2022年07月07日 09:27:25   作者:竹葉青輕清゛  
在C/C++中有一個(gè)基礎(chǔ)且重要的知識(shí),什么是聲明?什么是定義?他們的區(qū)別是什么?本文將帶你理清其中的區(qū)別

一、變量的聲明與定義

首先,舉個(gè)簡單的例子:

int a;
extern int b;

這里的兩個(gè)變量,哪個(gè)是聲明?哪個(gè)是定義?

為解決這個(gè)問題,我們必須要知道聲明與定義的含義。

聲明:聲明是用來告訴編譯器變量的名稱和類型,而不分配內(nèi)存。

  • 告訴編譯器,這個(gè)變量或者對(duì)象已經(jīng)匹配到一塊內(nèi)存空間上了,下面代碼中用到的變量或者對(duì)象會(huì)在別的地方定義,但此處并不分配內(nèi)存,所以聲明可以出現(xiàn)多次;
  • 告訴編譯器,這個(gè)名字已經(jīng)被預(yù)定了,別的地方不能再用它作為變量或者對(duì)象名。這種聲明最典型的例子就是函數(shù)參數(shù)的聲明。

定義:就是編譯器為一個(gè)變量或者對(duì)象分配到一塊內(nèi)存空間上,并給它取名字。這個(gè)名字就是變量名或?qū)ο竺?,所以同一名字的變量或者?duì)象只能被定義一次,當(dāng)多次被定義的時(shí)候,編譯器就會(huì)提示重復(fù)定義同一變量或?qū)ο蟮腻e(cuò)誤。

定義是為了給變量分配內(nèi)存,可以為變量賦初值。

在上述代碼中,extern 是一個(gè)關(guān)于聲明的關(guān)鍵字,放在變量或者函數(shù)前用于聲明,用來說明”此變量或者函數(shù)在別處定義“。

注意的是:即使使用了extern,如果給變量附了值,就是定義了。

我們現(xiàn)在知曉了聲明和定義的含義,那么對(duì)于上面的例子,我想答案早已浮出水面。

int a;			//此語句為定義
extern int b;	//此語句為聲明

示例:

extern int a;		//此語句為聲明
extern int b = 10;	//此語句為定義
typedef int INT; 	//此語句為聲明
struct Node; 		//此語句為聲明
int c ;				//此語句為定義
struct Node {		//此語句為定義
    int left;
    int right;
};

上述代碼中,變量名c,其類型為int,配分4字節(jié)的內(nèi)存空間(不同編譯器可能會(huì)有差異)。

二、函數(shù)的聲明與定義

首先,我們同樣先了解一下它們的含義

函數(shù)聲明:告訴編譯器,函數(shù)的名稱、參數(shù)類型和數(shù)量以及函數(shù)返回值的類型。

函數(shù)定義:為了給函數(shù)分配內(nèi)存空間。

例如:

int Max(int x, int y);	//此處聲明了一個(gè)函數(shù),其函數(shù)名為Max,參數(shù)為int x,int y,返回類型為int
int Max(int x, int y) {return x > y ? x : y;}	//此處定義了一個(gè)函數(shù)

函數(shù)的定義包含了函數(shù)的具體實(shí)現(xiàn)。

函數(shù)只要有實(shí)現(xiàn)(存在函數(shù)體{…})即為定義,否則為聲明。

注:為什么這里的函數(shù)聲明不用寫extern?函數(shù)一般是全局的,即他的可見性是最大范圍的,在別的文件也可以訪問這個(gè)函數(shù),其實(shí)函數(shù)默認(rèn)就是extern,所以可以不寫。

另外,當(dāng)在函數(shù)前加static 時(shí),則函數(shù)的作用域僅局限于本文件。

再來看一段代碼

/*  basic_stdy.h */
#ifndef _BASIC_STDY_H_
#define _BASIC_STDY_H_
//extern int a;		//在頭文件中聲明,必須加上extern,否則就是重定義
//void fun();		//不用加extern也可以
#endif
/*  basic_stdy.cpp */
#include"basic_stdy.h"
#include<iostream>
using namespace std;
int a(2);
void fun(){
            cout << a <<endl;
}
/* main.cpp */
#include<iostream>
//#include "basic_stdy.h"
using namespace std;
extern int a;		//ok不用包含頭文件, 變量只要聲明即可
extern void fun();	//ok不用包含頭文件, 函數(shù)只要聲明即可
int main(int argc,char **argv){
	cout << a << endl;
	fun();
	system("pause");
	return 0;
}

上述代碼中一共有三個(gè)文件basic_stdy.h、basic_stdy.cpp和main.cpp,要在main.cpp中使用其他文件中定義的變量和函數(shù),有以下兩種實(shí)現(xiàn)方式:

1、在basic_stdy.h頭文件中,聲明他們,然后在main.cpp中去包含頭文件;

2、在main.cpp中直接extern。

三、總結(jié)

  • 變量或函數(shù)可以聲明多次,但變量或函數(shù)的定義只能一次;
  • 聲明不會(huì)分配內(nèi)存,定義會(huì)分配內(nèi)存;
  • 聲明是告訴編譯器變量或函數(shù)的類型、名稱等,而定義是告訴編譯器變量的值,函數(shù)的具體實(shí)現(xiàn)。

到此這篇關(guān)于C語言中定義與聲明有哪些區(qū)別的文章就介紹到這了,更多相關(guān)C語言定義與聲明內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中設(shè)置進(jìn)程優(yōu)先順序的方法

    C語言中設(shè)置進(jìn)程優(yōu)先順序的方法

    這篇文章主要介紹了C語言中設(shè)置進(jìn)程優(yōu)先順序的方法,包括setpriority()函數(shù)和getpriority()函數(shù)以及nice()函數(shù),需要的朋友可以參考下
    2015-08-08
  • Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解

    Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解

    這篇文章主要介紹了Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置,CLion 是 JetBrains 推出的全新的 C/C++ 跨平臺(tái)集成開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-08-08
  • OpenCV實(shí)現(xiàn)簡單攝像頭視頻監(jiān)控程序

    OpenCV實(shí)現(xiàn)簡單攝像頭視頻監(jiān)控程序

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)簡單攝像頭視頻監(jiān)控程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C++面試八股文之智能指針詳解

    C++面試八股文之智能指針詳解

    智能指針是C++11引入的類模板,用于管理資源,行為類似于指針,但不需要手動(dòng)申請、釋放資源,本文主要為大家介紹了它的相關(guān)知識(shí),需要的可以參考一下
    2023-06-06
  • 深入探究C語言中的二叉樹

    深入探究C語言中的二叉樹

    樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n>=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合。把它叫做樹是因 為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。本文將帶你深入探究C語言中的二叉樹,感興趣的同學(xué)跟著小編一起學(xué)習(xí)吧
    2023-05-05
  • vs2019 Com組件初探之簡單的COM編寫及實(shí)現(xiàn)跨語言調(diào)用的方法

    vs2019 Com組件初探之簡單的COM編寫及實(shí)現(xiàn)跨語言調(diào)用的方法

    這篇文章主要介紹了vs2019 Com組件初探之簡單的COM編寫及實(shí)現(xiàn)跨語言調(diào)用的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試詳解

    這篇文章主要介紹了C++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • C++11互斥量的具體使用

    C++11互斥量的具體使用

    互斥量是一種同步原語,是一種線程同步的手段,用來保護(hù)多線程同時(shí)訪問的共享數(shù)據(jù),本文主要介紹了C++11互斥量的具體使用,感興趣的可以了解一下
    2023-11-11
  • C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn)

    C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn)

    memcpy是c和c++使用的內(nèi)存拷貝函數(shù),本文主要介紹了C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    這篇文章主要介紹了C++ 中的INT_MAX,INT_MIN數(shù)值大小操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評(píng)論