首页 理论教育使用#ifdef和#ifndef优化编程

使用#ifdef和#ifndef优化编程

【摘要】:程序中第3行定义了宏:#defineTEST,第16行语句是条件编译指令,用于判断程序中是否定义过宏名TEST。注意,#ifndef后面的标识符部分不需要圆括号,仅需用空格和#ifdef分开即可。通过比较发现,#ifndef编译预处理的含义与#ifdef刚好相反。

1.#ifdef编译预处理语句

#ifdef预处理语句的基本使用格式是:

#ifdef 标识符

上面预处理代码段的含义是:如果“标识符”已经被#define命令定义过,则编译程序段1,否则编译程序段2,使用时需要注意的问题与#if序列相同。

【例9.6】 编程求解表达式23+34+45的值。

程序中第3行定义了宏:#define TEST,第16行语句是条件编译指令,用于判断程序中是否定义过宏名TEST。如果前面定义过宏名TEST,则用于调试的输出语句(第17行)被编译进执行代码中,程序执行时将输出中间变量k和g的值;否则不会编译此调试语句,也不会输出中间变量k和g的值。(www.chuimin.cn)

程序调试过程结束后,把第3行的宏定义改为注释语句,使得调试用的输出语句失效。当再需要使用调试语句时,只要去掉第3行的注释符号即可重新启用宏定义命令,恢复所有的调试输出语句。

2.#ifndef编译预处理语句

#ifndef预处理语句的基本使用格式是:

上面预处理程序段的意思是:如果没有用#define预处理语句定义过“标识符”,则编译程序段1,否则编译程序段2。注意,#ifndef后面的标识符部分不需要圆括号,仅需用空格和#ifdef分开即可。通过比较发现,#ifndef编译预处理的含义与#ifdef刚好相反。