#undef

#undef,編程函式,內容為是在後面取消以前定義的宏定義

#undef

#undef 是在後面取消以前定義的宏定義

該指令的形式為

#undef 標識符

其中,標識符是一個宏名稱。如果標識符當前沒有被定義成一個宏名稱,那么就會忽略該指令。

一旦定義預處理器標識符,它將保持已定義狀態且在作用域內,直到程式結束或者使用#undef 指令取消定義。

在此程式中,我們將取消在先前程式中對預處理器的定義。

#include

#include

#define MAX 5

#undef MAX

void main()

{

char name[MAX]="abcde"; //只能用abcd,否則會提示說超出長度,原因大概是"\0"字元

cout<<"MAX = "<<

for(int i=0;i

cout<<<" "<

}

得到如下錯誤訊息

未定義符號 'MAX'

初始值設定項太多

在此程式中對 MAX 定義後又取消了定義。編譯該程式時報錯。由於未定義 MAX,char name[MAX] 的數組大小不可用,因此編譯器發出第二個錯誤訊息。

又如

#define TEST_A 1

#define TEST_CLASS_A clase T1

#include "TEST.h"

#undef TEST_A

#undef TEST_CLASS_A

在這一個檔案中使用宏定義:#undef TEST_A 1

#undef TEST_CLASS_A clase T1

出了#include "TEST.h" 這個檔案宏定義釋放掉

就是這個意思

也就是在檔案#include "TEST.h" 中宏定義#define TEST_A 1

#define TEST_CLASS_A clase T1 起作用,過了這一語句宏定義就釋放掉了,在test.h里,這個宏是有效的,然後出了這個頭檔案,又無效了。

::

在TEST.h(或TEST.cpp)中1就是TEST_A,clase T1就是TEST_CLASS_A clase;只在TEST中有效。

程式示例

修改已經宏定義的符號常量的值:

#include

int main( void )

{

#define MAX 200

printf("MAX= %d\n",MAX);

#undef MAX

#define MAX 300

printf("MAX= %d\n",MAX);

return 0;

}

相關詞條

熱門詞條

聯絡我們