一. 命名约定
一般来讲 函数和宏的用法十分相似所以语言没办法帮我们区分二者。
拿我们平时的一个习惯是:
将宏名全部大写
函数名不要全部大写
二. #undef
当我们下面不想再用一个宏的时候我们可以使用这个符号
这样我们下面就无法使用宏了
举个例子
使用了这个#undef之后 我们就不能再使用Max了
三. 命令行定义
我们先在vim编译器下写出这段代码
然后尝试编译它
我们可以发现它给我们报错了 说sz没有定义
然后我们可以尝试在编译的时候去指定sz的大小
我们可以发现程序成功编译出来了
我们尝试执行一下试试
发现是可以完美运行的
然后我们再尝试输入sz=99试试
我们可以发现 这也是可以完美运行的
是不是很神奇
代码里面明明有个符号没有定义 我们却可以运行它
这就叫命令行定义
当我们想要编译出一个程序的不同版本时 这个特性就有点用处
四. 条件编译
直接上代码
当我们写出以上的代码的时候 我们可能会好奇 数组里面到底有没有放shuzi
那么我们就可以加上这么一行代码
但是呢 这么一行代码其实是没什么用的 删了又有点可惜 这时候我们就可以使
用我们的条件编译
当我们不想要它的时候我们可以将1改成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
多分支
判断是否定义
五. 文件包含
5.1 查找策略
查找策略:先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件。
如果找不到就提示编译错误。
5.2 文件的嵌套包含
所以说我们可以写出以下代码
当我们写出这些代码的时候 头文件就会只会被引用一次
当然使用#pragma once的效果也是一样的
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏
希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯