c預處理和宏

文件的預處理

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

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

如果想要自己編寫的頭文件加入搜索路徑之中,就需要在CMakeLists 添加
include_directories(“xxx(文件夾)”)

還需要添加 實現的.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’)

宏的定義,返回值參數是沒有類型的概念

條件編譯

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)

Tags: