以下是引用erty1001在2015-7-3 21:47:44的发言:
愿闻其详 帮忙解析一下 #define C_A
#define C_A 01
的区别~
前者是定义“存在一个宏”,后者是给这个宏以具体的替换内容。前者是不需要理会内容的,它不用于文本替换,用于文本处理,预处理器在处理文本的时候,当发现前者的语句,就在内存中打开一个开关,记忆存在这么一个开关值,通常当作逻辑真,然后,在文本的后面,当遇到#ifdef C_A……#endif这样的预处理指令时,就把块内的代码写出到预处理结果文本中,其功能与编程的if语句相当。这个作用,一般是针对移植平台的,比如调试版本的代码和发布版本不同、Windows下的代码和Linux下的又不同,都可以用这种开关切换(注意,编译器编译的是预处理輸出后的文本,被#ifdef/#endif筛掉的代码是绝不存在于最终程序中的),其好处是把所有版本的代码都写在同一个源代码文档中,有些共同部分,则不用反复写,而不同环境之间的差异,也可以一目了然,调试和修改起来也较方便。
最常见的应用,是在头文件中:
程序代码:
#ifndef C_A
#define C_A
……
#endif
这个宏是保护头文件不被重复包含的(在vc中,有专用的开关#pragma once)。