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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】#ifndef作用

發布時間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】#ifndef作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
定義  #ifndef x
  #define x
  ...
  #endif
  這是定義的一種,它可以根據是否已經定義了一個變量來進行分支選擇,一般用于調試等等.實際上確切的說這應該是預處理功能中三種(宏定義,文件包含和條件編譯)中的一種----條件編譯。
C語言在對程序進行編譯時,會先根據預處理命令進行“預處理”。C語言編譯系統包括預處理,編譯和鏈接等部分。
  #ifndef x //先測試x是否被宏定義過
  #define x
  程序段1 //如果x沒有被宏定義過,定義x,并編譯程序段1
  #endif
  程序段2 //如果x已經定義過了則編譯程序段2的語句,“忽視”程序段1。
  條件指示符#ifndef 的最主要目的是防止頭文件的重復包含和編譯。了解:條件編譯當然也可以用條件語句來實現。
但是用條件語句將會對整個源程序進行編譯,生成的目標代碼程序很長,而采用條件編譯,則根據條件只編譯其中的程序段1或程序段2,生成的目標程序較短。如果條件選擇的程序段很長,采用條件編譯的方法是十分必要的。

編輯本段補充一些內容

  #ifndef 標示1
//判斷"標示1"是否定義,如果被定義則返回假,如果沒有被定義則返回真。
  /**********************************/
  語句1 #ifndef 標示1
  語句2 #define 標示1
  語句3 #endif
  語句4 ……
  語句5 ……
  該段代碼意思是:如果標示1沒有被定義,則重定義標示1,即執行語句2、語句3、語句4、……;如果標示1已經被定義,則直接跳過語句2、語句3,直接執行語句4、語句5、……

  /***********************************/
  備注:#ifndef 和 #endif 要一起使用,如果丟失#endif,可能會報錯。
  千萬不要忽略了頭文件中的#ifndef,這是一個很關鍵的東西。比如你有兩個C文件,這兩個C文件都include了同一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,于是問題來了,大量的聲明沖突。

  還是把頭文件的內容都放在#ifndef和#endif中吧。不管你的頭文件會不會被多個文件引用,你都要加上這個。一般格式是這樣的:

  #ifndef <標識>
  #define <標識>
  ......
  ......
  #endif
  <標識>在理論上來說可以是自由命名的,但每個頭文件的這個“標識”都應該是唯一的。標識的命名規則一般是頭文件名全大寫,前后加下劃線,并把文件名中的“.”也變成下劃線,如:stdio.h
  #ifndef _STDIO_H_
  #define _STDIO_H_
  ......
  #endif

編輯本段詳細討論#ifndef的作用

  在c語言中,對同一個變量或者函數進行多次聲明是不會報錯的。所以如果h文件里只是進行了聲明工作,即使不使用#
ifndef宏定義,多個c文件包含同一個h文件也不會報錯。
  但是在c++語言中,#ifdef的作用域只是在單個文件中。所以如果h文件里定義了全局變量,即使采用#ifdef宏定義,多個c文件包含同一個h文件還是會出現全局變量重定義的錯誤。

  使用#ifndef可以避免下面這種錯誤:如果在h文件中定義了全局變量,一個c文件包含同一個h文件多次,如果不加#ifndef宏定義,會出現變量重復定義的錯誤;如果加了#ifndef,則不會出現這種錯誤。

編輯本段條件編譯的命令的三種形式

  “
條件編譯”命令允許對程序中的內容選擇性地編譯。即可以根據一定的條件選擇是否編譯。
  條件編譯的命令主要有以下幾種
  形式1
  # i f d e f標識符
  程序段 I
  # el s e
  程序段 2
  # en di f
  它的作用是當 “ 標識符”已經由# d e f i n e定義過了。則編譯“ 程序段 1 ” 。 否則編譯“
程序段 2 ” 。其中如果不需要編譯“ 程序段 2 ”。則上述形式可以變換 為:
  # i f d e f標識符
  程序段 1
  # en di f
  形式2
  # i f n d e f 標識符
  # define 標識符
  程序段 1
  # el s e
  程序段 2
  #e n di f
  它的作用是當 “ 標識符 沒有由# d e f i n e定義過。 則編譯“程序段 1”。否則編譯“程序段
2” 。同樣當無“ 程序段2 ”時。則上述形式變換為:
  # i f n d e f標識符
  # define 標識符
  程序段 1
  #e n di f
  形式3
  # if表達式
  程序段 1
  #el s e
  程序段 2
  #endif
  它的作用是 當“表達式”值為真時。編譯程序段1。否則則編譯程序段
  2。同樣 當無程序段 2時,則上述形式變換 為 :
  # 表達式
  程序段 1
  #e n di f
  以上三種形式的條件編譯預處理
  結構都可以嵌套使用。 當# e l s e后嵌套 # i f 時,可以使用預處理命令 # e l i f ,
它相
  當于 # e l s e# i f 。在程序中使用條件編譯主要是為了方便程序的調試和移植。

總結

以上是生活随笔為你收集整理的【转】#ifndef作用的全部內容,希望文章能夠幫你解決所遇到的問題。

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