#if defined 和 #if ! defined 的用法
背景:MFC初學(xué),頭文件中有
#if !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)
#define AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_
// Info : Other content
#endif // !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)
注:AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_ 是一個(gè)由VC自定義的標(biāo)識(shí)符,你也可以替換成其他的,上面代碼就可以類比為下邊的代碼,看起來是不是清爽很多啊。這是微軟VS的個(gè)性化命名#if !defined(AFX_HELLOMFC_H_)
#define AFX_HELLOMFC_H_
// Info : Other content
#endif // !defined(AFX_HELLOMFC_H_)
正題:C語(yǔ)言的宏定義一、#if defined 的作用因?yàn)閷?duì)于一個(gè)大程序而言,我們可能要定義很多常量( 不管是放在源文件還是頭文件 ),那么我們有時(shí)考慮定義某個(gè)常量時(shí),我們就必須返回檢查原來此常量是否定義,但這樣做很麻煩.
if defined宏正是為這種情況提供了解決方案.舉個(gè)例子,如下:
#define a 100
#define b 100
#define v 100
// ^^^^^^
#define s 100
#define da 100
#define af 100
#define a 200 // Here is the key
上面已經(jīng)定義過一次 a 的值了,因?yàn)橹虚g有很多語(yǔ)句,看不到,又忘了有沒有定義,下面又來了一條,把上面的替掉了。這就是問題了!此時(shí),我們要檢查a是否定義(假設(shè)我們已經(jīng)記不著這點(diǎn)了),或者我們要給a一個(gè)不同的值,就加入如下句子:#if defined a // or #ifdef a
#undef a
#define a 200
#endif
或者#ifndef a
#define a 200
#endif
上面就是 #if defined 的唯一作用了?二、#if ! defined 的作用#if defined XXX_XXX#endif
是條件編譯,是根據(jù)你是否定義了XXX_XXX這個(gè)宏,而使用不同的代碼。一般.h文件里最外層的
#if !defined XXX_XXX
#define XXX_XXX
#endif
是為了防止這個(gè).h頭文件被重復(fù)include
三、其他相關(guān)含義
指令 用途
# 空指令,無(wú)任何效果
#include 包含一個(gè)源代碼文件
#define 定義宏
#undef 取消已定義的宏
#if 如果給定條件為真,則編譯下面代碼
#ifdef 如果宏已經(jīng)定義,則編譯下面代碼
#ifndef 如果宏沒有定義,則編譯下面代碼
#elif 如果前面的#if給定條件不為真,當(dāng)前條件為真,則編譯下面代碼
#endif 結(jié)束一個(gè)#if……#else條件編譯塊
#error 停止編譯并顯示錯(cuò)誤信息
轉(zhuǎn)載于:https://www.cnblogs.com/herbertchina/p/4306818.html
總結(jié)
以上是生活随笔為你收集整理的#if defined 和 #if ! defined 的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Framework 工具
- 下一篇: placeholder=请输入用户名(六