#undef將保持已定義狀態且在
作用域內,直到程序結束或者使用#undef 指令取消定義。
預處理器
在此程序中,我們將取消在先前程序中對預處理器的定義。
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream.h> #include<string.h> #define MAX 5 #undef MAX void main() { char name[MAX]="abcd"; //只能用abcd,否則會提示說超出長度,原因是由於"\0"字符 cout<<"MAX = "<<MAX<<endl; for(int i=0;i<MAX;i++) cout<<name<<" "<<endl; } |
得到如下錯誤消息:
未定義符號 'MAX'
初始值設定項太多
在此程序中對 MAX 定義后又取消了定義。編譯該程序時報錯。由於未定義 MAX,char name[MAX] 的數組大小不可用,因此編譯器發出第二個錯誤消息。
宏定義
1 2 3 4 5 |
#define TEST_A 1 #define TEST_CLASS_A clase T1 #include "TEST.h" #undef TEST_A #undef TEST_CLASS_A |
在這一個文件中使用宏定義:
1 2 |
#undef TEST_A 1 #undef TEST_CLASS_A clase T1 |
在#include "TEST.h" 這個文件宏定義,釋放掉,就是這個意思,也就是在文件#include "TEST.h" 中宏定義
1 |
#define TEST_A 1 |
#define TEST_CLASS_A clase T1 起作用,過了這一語句宏定義就釋放掉了,在test.h里,這個宏是有效的,然后出了這個頭文件,又無效了。
修改已經宏定義的符號常量的值:
1 2 3 4 5 6 7 8 9 10 |
#include <stdio.h> int main( void ) { #define MAX 200 printf("MAX= %d\n",MAX); #undef MAX #define MAX 300 printf("MAX= %d\n",MAX); return 0; } |