C语言的编译预处理-创新互联
1、C程序的过程
创新互联服务项目包括南山网站建设、南山网站制作、南山网页制作以及南山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,南山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到南山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!处理流程:
静态链接与动态链接:
链接可以分为静态链接(静态库)与动态链接(共享库):
静态库是代码的归档,在使用静态库时是采用的复制代码的方式。共享库是可执行文件的组成部分,在使用共享库时是采用的提供代码在共享库的地址给可执行文件的方式。
GCC编译器:区分大小写
gcc -E : 只做预处理,其它都不做,(.i)
gcc -S : 检查语法错误等,生成汇编文件(.s)
gcc -c : 完成汇编,不链接(.o)
gcc -o : 修改目标文件名
gcc : 编译+链接,生成可执行文件,默认是 a.out
gcc -Wall : 生成所有的警告信息(提示代码质量,少警告)
Gcc -D宏名: 条件编译,用于版本选项开关
包含头文件的方法:
宏定义与使用分析:
内置宏:
条件编译使用:
条件编译使得我们可以按不同的条件编译不同的代码段,因而可以产生不同的目标代码
#if…#else…#endif被预编译器处理;而if…else语句被编译器处理,必然被编译进目标代码
实际工程中条件编译主要用于一下两种情况:
不同的产品线共用一份代码;区分编译产品的调试版和发布版
#error(#warning)和#line :
#error用于生成一个编译错误消息,并停止编译
用法: #error message (message不需要用双引号包围)
#error编译指示字用于自定义程序员特有的编译错误消息类似的,#warning用于生成编译警告,但不会停止编译
#line用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
用法: #line number filename (filename可省略)
#line编译指示字的本质是重定义__LINE__和__FILE__
#pragma预处理:
#pragma GCC dependency 文件名 (已使用版本控制代替)
把当前文件和指定文件之间建立依赖关系,如果当前文件最后修改时间比指定文件新,就没问题,否则就产生警告
#pragma GCC poison 标识符或关键字
把后面的标识符或关键字禁止使用
#pragma pack(数字)
针对结构体的对齐补齐
Struct占用内存大小分析:
第一个成员起始于0偏移处
每个成员按其类型大小和指定对齐参数n中较小的一个进行对齐
偏移地址和成员占用大小均需对齐
结构体成员的对齐参数为其所有成员使用的对齐参数的大值结构体总长度必须为所有对齐参数的整数倍
#和##运算符使用:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文标题:C语言的编译预处理-创新互联
网址分享:http://ybzwz.com/article/ceshhj.html