文件名称:无参宏定义-复高斯分布的数学基础理论
文件大小:6.48MB
文件格式:PDF
更新时间:2024-06-28 07:07:15
嵌入式 Linux C
(1)无参宏定义 无参宏的宏名(也就是标识符)后不带参数,其定义的一般形式为: #define 标识符 字符串 � 其中的#表示这是一条预处理命令。凡是以#开头的均为预处理命令。 � define 为宏定义命令。 � 标识符为所定义的宏名。 � 字符串可以是常数、表达式、格式串等。 在前面介绍过的符号常量的定义就是一种无参宏定义。此外,用户还可对程序中反复使 用的表达式进行宏定义,例如: # define M (y+3) 这样就定义了 M 表达式为(y+3),在此后编写程序时,所有的(y+3)都可由 M 代替, 而对源程序作编译时,将先由预处理程序进行宏代换,即用(y+3)表达式去置换所有的宏 名 M,然后再进行编译。 #define M (y+3) void main(){ int s,y; printf("input a number: "); scanf("%d",&y); s=5*M; printf("s=%d\n",s); } 在上例程序中首先进行宏定义,定义 M 表达式(y+3),在“s=5*M”中作了宏调用,在 预处理时经宏展开后该语句变为: s = 5 ( y + 3 ) 这里要注意的是,在宏定义中表达式(y+3)两边的括号不能少,否则该语句展开后就 成为如下所示: s = 5 * y + 3 这样显然是错误的。 对于宏定义还要说明以下几点。 � 宏定义用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种 简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不 作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。 � 宏定义不是声明或语句,在行末不必加分号,如加上分号则连分号也一起置换。 � 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束,如要终止其作 用域可使用# undef 命令来取消宏作用域,例如: # define PI 3.14159 main() {