聲明(declaration):意味着告訴編譯器關於變量名稱、變量類型、變量大小、函數名稱、結構名稱、大小等等信息,而且在聲明階段不會給變量分配任何的內存。ios
定義(definition):定義就是在變量聲明後,給它分配上內存。能夠當作「定義 = 聲明 + 內存分配」。app
例如:函數
#include <iostream> using namespace std; int addtion(int a,int b);//聲明 struct product{unsigned int weight;double price;};//聲明 int main(){ cout << "addtion is " << addtion(6,8) << endl; product apple,orange;//定義 return 0; } //定義 int addtion(int a,int b){ return a+b; }
上面的案例中,spa
int addtion(int a,int b); struct product{unsigned int weight;double price;};
上面是聲明,它們只是告訴編譯器有這個東西,並不會分配內存。code
product apple,orange; int addtion(int a,int b){return a+b;}
上面是定義,給他們會被分配內存。
聲明和定義還有一種常見的,就是extern修飾的變量。當使用extern關鍵字修飾變量(未初始化),表示變量聲明。當在另外一個文件中,爲extern關鍵字修飾的變量賦值時,表示變量定義。
例如:
header.hblog
#ifndef HEADER_H #define HEADER_H //定義global_x變量 ,在任何包含了該文件的文件中均可以使用global_x變量 int global_x = 20; #endif
file.h內存
#include <iostream> #include "header.h" extern int global_x;//聲明 global_x 變量 int main(){ std::cout << "global_x = " << global_x << std::endl; return 0; }
file.h文件聲明瞭global_x變量,可是globar_x變量的定義是在header.h文件中。編譯器
用 g++ file.h -o file 命令編譯後會獲得可執行文件(file),再用命令 ./file 運行file文件。
結果以下:it
global_x = 20;