c预处理和宏

#include "xxx.h"
1 首先查找当前源文件所在的路径
2 查找工程的头文件搜索路径

#include <xxxx.h>
查找工程的头文件搜索路径

如果想要自己编写的头文件加入搜索路径之中,就需要在CMakeLists 添加
include_directories("xxx(文件夹)")

还需要添加 实现的.c文件 以及文件的路径目录。
比如说自己写了一个

c预处理和宏


编译器不知道你写了一个factorial.c这个文件,因此需要把文件路径添加进去,让其编译。
add_executable(c_pra_1 main.c src/factorial.c)

头文件用来导出函数模型,源文件用来实现函数

宏 宏函数

宏函数是直接原封不动地替换,和函数调用不相同,并没有先后计算的说法。因此传入的参数一定要是没有副作用的才可以。
#define MAX(a,b) (a)>(b) ? (a):(b)

define IS_HEX_CHARACRER(ch) \

((ch)>='0' && (ch)<='9')||
((ch)>='A' && (ch)<='F')||
((ch)>='a' && (ch)<='f')

宏的定义,返回值参数是没有类型的概念

c预处理和宏

条件编译

1 #ifdef 如果定义
2 #ifndef 如果没有定义
3 #if 如果。。

endif

如果不想在代码中定义宏,就可以直接在CMakeLists文件中定义,比如说,想要定义#define DEBUG,即可在文件中添加下面一行
target_compile_definitions(${name} PUBLIC DEBUG)

判断c++平台等

#ifdef __cplusplus extern "C"{ #endif 中间可以填写其他函数 int ADD(int left,int right); #ifdef __cplusplus }; #endif 重现PRINTF

使用宏定义 #define PRINTLNF(format,...)printf(format"\n",##VA_ARGS)
传递参数#define PRINT_INT(value)PRINTLNF(#value":%d",value)
使用一些行号列号#define PRINTLNF(format,...)printf("("FILE":%d) %s:"format"\n",LINE,FUNCTION,##VA_ARGS)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpwss.html