#define size 100 ain int table; undef size/从该点起,宏名SIE不再有效/ 16
16 #define SIZE 100 main ( ) { int table [ SIZE ] ; #undef SIZE /* 从该点起,宏名SIZE不再有效*/ ┇ }
一个源程序文件中可以含有若干个deie命令 不同的# define命令中指定的“宏名”都不能相同。 但在TC2.0中是允许的它将自动取代前一次的该 宏名”的定义。 例如: man int x, y, Z; for(x=0;x<2;x++){ #define xyz 100 y=XYZ:/y=100;*/ #define xyz 1000 Z=XYZ /kz=1000: printf (%d %odn",y,z)
17 main ( ) { int x , y , z ; for ( x=0 ; x<2 ; x++ ) { #define XYZ 100 y = XYZ ; #define XYZ 1000 z = XYZ ; printf ( "%d %d\n" , y , z ) ; } } 例如: 一个源程序文件中可以含有若干个#define命令, 不同的 #define 命令中指定的 “宏名” 都不能相同。 但在 TC2.0 中是允许的,它将自动取代前一次的该 “宏名”的定义。 /* y = 100 ; */ /* z = 1000 ; */
宏名必须在源文件中使用该宏名的位置之前定义, 否则将不被替换。 这个PI将 不被替换! float PI=3. 14 define pi3.1/P的作用域从该点开始*/ main printf(“%fn”,PI); 18
18 宏名必须在源文件中使用该宏名的位置之前定义, 否则将不被替换。 float PI = 3.14 ; #define PI 3.1 /*PI的作用域从该点开始*/ main ( ) { printf ( “%f\n” , PI ) ; } 这 个 PI 将 不被替换!
2、类函数宏定义 类函数宏是指其定义形式和作用都与函数相似 的宏定义(所以称之为类函数宏)。简单地说,类函 数宏即是在宏名后可指定若干参数的宏定义形式: # define宏名(宏参数1,宏参数2,…)宏替换主体 这儿不能有 这儿至少要 空格 有一个空格 宏参数;是标识符是宏名所带的参数
19 2、类函数宏定义 类函数宏是指其定义形式和作用都与函数相似 的宏定义(所以称之为类函数宏)。简单地说,类函 数宏即是在宏名后可指定若干参数的宏定义形式: #define 宏名( 宏参数1 , 宏参数2 , ... ) 宏替换主体 这儿不能有 空格 这 儿 至少要 有一个空格 宏参数i 是标识符,是宏名所带的参数
类函数宏在程序中的引用形式为: 宏名(替换参数1替换参数2八…,替换参数n) “替换参数”对应于宏定义中的“宏参数”,但它 们之间只有参数个数、顺序的对应,而不存在类型 致的对应问题。 对于如下宏定义: #define MaX(A, B)((A)>(B)?(A): B)) 若在源文件中含有如下宏调用: X= MAX(P+q, r+s) 替换成 x=((p+q)>(r+s)?(p+q):(r+s)); 20
20 类函数宏在程序中的引用形式为: 宏名( 替换参数1 , 替换参数2, ,...替换参数n ) “替换参数i ”对应于宏定义中的“宏参数i ” , 但它 们之间只有参数个数、顺序的对应,而不存在类型 一致的对应问题。 对于如下宏定义: #define MAX(A , B) ( (A) >(B) ? (A) : (B) ) 若在源文件中含有如下宏调用: x = MAX ( p+q , r+s ) ; x=( ( p+q ) > ( r+s ) ? ( p+q ) : ( r+s ) ) ; 替换成