- ifdef是判断后面标识符是否被#define定义。
- 如果被定义了就执行#ifdef与#endif之间的语句。
- 如果没有被定义就不会执行#ifdef与#endif之间的语句。
- #ifdef只管后面的标识符是否被定义,如果标识符被定义了不管后面的标识符是何值都会被执行。
- #ifdef还可以与#else搭配使用。
- 如果#ifdef后面的标识符没有被定义,就执行#else与#endif之间的语句,不执行#ifdef与#else之间的语句。
- #ifdef只能与一个#else搭配使用,也就是说,根据标识符有没有被定义,二选一来执行。
- #ifndef与ifdef的逻辑相反。
- 如果#ifndef后面的标识符没有被定义,就执行#ifndef与#else之间的语句。
- 如果被定义了,就执行#else与#endif之间的语句。
- #if后面必须是一个常量表达式。
- 基本逻辑与if语句相似,都是选择语句。
- 上面三个例中执行:代码1,代码3,代码6。
- #if defined()与#if ! defined()分别对应着#ifdef与#ifndef。
- #if defined()与#if ! defined()解决了#ifdef与#ifndef只能二选一的问题。
- 如果C与CPP同时定义打印1,如果C与CPP其中一个被定义打印2,如果都没有定义打印3。
" "与< >的区别
- " ":先在源文件所在目录下查找,如果该头文件未被找到,编译器就像查找库函数头文件一样在标准位置查找头文件。
如果找不到就提示编译错误。
- < >:直接去标准路径下去查找,如果找不到就提示编译错误。
- " "最好用在自己的头文件,而< >用在引用库函数的头文件中。
如果都用" "时间效率会降低。
- 所有头文件都必须带上条件编译,防止被重复包含!
- 那么,重复包含一定报错吗?
- 不会!重复包含,会引起多次拷贝,主要会影响编译效率!同时,也可能引起一些未定义错误,但是特别少。
- #include本质是把头文件中相关内容,直接拷贝至源文件中。
#undef
- #undef用于取消#define定义的标识符与宏
- 所以,我们要清楚#define的作用范围,从定义语句开始一直往下都能作用,除非遇到#undef。
#error
- 核心作用是可以进行自定义编译报错。
- 先了解一下预定义符号
- 本质是可以定制化你的文件名称和代码行号,很少使用。
- #pragma message()作用:可以用来进行对代码中特定的符号(比如其他宏定义)进行是否存在进行编译时消息提醒。
- #pragma warning(disable:XXXX)是禁止某些错误报错。
- #pragma pack( )修改默认对齐数。
- #pragma once防止头文件重复包含。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)