一. 命名约定
一般来讲 函数和宏的用法十分相似所以语言没办法帮我们区分二者。
拿我们平时的一个习惯是:
将宏名全部大写
函数名不要全部大写
二. #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的效果也是一样的
以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言