一. 命名约定
一般来讲 函数和宏的用法十分相似所以语言没办法帮我们区分二者。
拿我们平时的一个习惯是:
将宏名全部大写
函数名不要全部大写
二. #undef
当我们下面不想再用一个宏的时候我们可以使用这个符号
这样我们下面就无法使用宏了
举个例子
使用了这个#undef之后 我们就不能再使用Max了
三. 条件编译
直接上代码
#define PRINT 1 int main() { #ifdef PRINT printf("hehe\n"); #endif return 0; }
调试性的代码,删除可惜,保留又碍事,所以我们可以选择性的编译。
常见的条件编译指令有
1. #if 常量表达式 //... #endif //常量表达式由预处理器求值。 如: #define __DEBUG__ 1 #if __DEBUG__ //.. #endif 2.多个分支的条件编译 #if 常量表达式 //... #elif 常量表达式 //... #else //... #endif 3.判断是否被定义 #if defined(symbol) #ifdef symbol #if !defined(symbol) #ifndef symbol 4.嵌套指令 #if defined(OS_UNIX) #ifdef OPTION1 unix_version_option1(); #endif #ifdef OPTION2 unix_version_option2(); #endif #elif defined(OS_MSDOS) #ifdef OPTION2 msdos_version_option2(); #endif #endif
多分支
判断是否定义
四. 文件包含
4.1 查找策略
查找策略:先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件。如果找不到就提示编译错误。
4.2 文件的嵌套包含
所以说我们可以写出以下代码
当我们写出这些代码的时候 头文件就会只会被引用一次
当然使用#pragma once的效果也是一样的
以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言