日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++头文件与变量的声明和定义

發布時間:2023/12/2 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++头文件与变量的声明和定义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

版權聲明:本文為博主轉載文章,遵循?CC 4.0 BY-SA?版權協議,轉載請附上原文出處鏈接和本聲明。

原文鏈接:https://blog.csdn.net/mountzf/article/details/51767353

最近遇到了變量重復包含的問題,才發現自己有好多知識已經模糊了,真慚愧。首先說下頭文件,其實頭文件對計算機而言沒什么作用,她只是在預編譯時在#include的地方展開一下,沒別的意義了,頭文件主要作用有兩個:一是把很多其他文件需要重復使用的函數變量等在此聲明,在需要的地方include;二是給使用你函數文件的人看的。那既然是說明,那么頭文件里面放的自然就是關于函數,變量,類的“聲明”了。記著,是“聲明”,不是“定義”。
那么,大家知道聲明和定義的區別。所以,最好不要在頭文件里定義什么東西。比如全局變量:

/*xx頭文件*/ #ifndef _XX_頭文件.H #define _XX_頭文件.H int A; #endif

那么,很糟糕的是,這里的int A是個全局變量的定義,如果這個頭文件被多次引用的話,你的A會被重復定義。

變量的定義:為變量分配存儲空間,同時指明變量的類型和名字。另外變量的初始化,就是在變量的定義出給出值。

變量的聲明:它主要向程序聲明變量的類型和名字。定義也是聲明(這是許多人搞不清楚的地方),那既然變量的定義就是聲明,為啥還要再多出來個變量的聲明這個概念,直接就用變量的定義不是就可以了?

其實不然,C++中有個關鍵字是用來聲明變量的,它是extern。它聲明一個變量卻不定義它,即不在給它一個存儲空間。要在包含該文件的文件中使用此變量應該聲明全局變量“extern int A”。

頭文件中變量如果沒有初始化就是聲明;初始化了就是定義,此時被包含之后會發生重復定義的錯誤。全局變量的定義宜放在某個 .c 文件中,而 .h 文件里寫的是變量的聲明。頭文件應用于聲明而不是用于定義。

其實,C++標準并沒有規定頭文件中不能定義 變量,只不過如果在頭文件中定義變量,而該頭文件又被多次包含的話,會造成變量的重新定義。這和頭文件中的函數聲明不同,因為函數在頭文件中僅僅是聲明,聲明可以有多個,但是無論是函數還是變量定義都只能有一個,否則就會發生重復定義的錯誤。

并不是所有的變量都能用extern聲明,只有全局變量并且沒有被static 聲明的變量才能聲明為extern. 所以如果你不想自己源文件中全局的變量被其他文件引用,你就可以給變量加上static聲明。

非const變量默認為extern const變量默認為文件的局部變量。而const變量如果想要在其他文件里被訪問,必須顯示的指定它為extern。如果const對象在編譯時可以確定其值,可以將其放在頭文件中定義。這么做是有原因的——const對象默認情況下是定義該變量的文件的局部變量,這樣即使此頭文件被多個包含,都不會在包含這些文件中重復定義此變量,所有對于這個const對象的引用全都指向在頭文件中定義的對象。如果在const對象定義的時候聲明extern,const對象就變得和普通非const對象一樣,從而失去此特性(非const對象的默認屬性為extern)。

所以,總結如下:

  • 如果是要定義全局變量,那么在頭文件中用extern關鍵字聲明,然后在另一個.cpp文件中定義;
  • 如果是要聲明一個不想被其他文件使用、只能被本文件使用的變量,可以用static關鍵字在頭文件中進行定義;
  • 如果所要定義的變量為局部變量,并且其值在編譯時就已經可以確定,就可以用const關鍵詞在頭文件中進行定義。

祝楓
2016年6月27日于深圳

總結

以上是生活随笔為你收集整理的C/C++头文件与变量的声明和定义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。