预处理
#include #define 都属于预处理操作,两者都不是关键字
#include 包含头文件
#define 宏,是直接替换,不进行语法检查
#define 宏名 宏体 (一般为了保险起见,尽量加个括号)
#define ABC (5+3)
#define ABC(x) (5+(x)) (宏函数,参数x也尽量加个括号)
条件编译:根据开关量来控制哪些区域的代码编译与否
#ifdef
#else
#endif
预定义宏(系统宏)
__FUNCTION__:函数名
__LINE__:行号
__FILE__:文件名
使用gcc命令加-D参数时: gcc -DABC 相当于: #define ABC 预处理之前,通过编译器人为增加的宏名
宏展开下的#、##
#(字符串化)
##(连接符号)
#define ABC(x) #x
printf(ABC(abc\n)) ---> printf("abc\n")
#define ABC(x) day##x
printf("the day is %d\n", ABC(1)) ---> printf("the day is %d\n", day1)
链接
链接实际上就是把很多 .o文件融合连接在一起生成可执行程序
常见错误
预处理错误
#include "name" //在当前目录下寻找名字,自定义的头文件,#include "abc.h"
#include <name> //在系统的环境变量中寻找名字,系统库的
一般错误都会是:not find
解决方法:gcc -I跟查找头文件的目录 gcc -I./inc -o xxx xxx.c
也可以在:#include "name"处填写为:#include "./inc/abc.h"
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 分享4款.NET开源、免费、实用的商城系统