C语言的编译预处理

发布时间:2020-08-01 12:13:25 作者:少年不在了
来源:网络 阅读:1070

1、C程序的过程

C语言的编译预处理

处理流程:
C语言的编译预处理

静态链接与动态链接:
C语言的编译预处理

链接可以分为静态链接(静态库)与动态链接(共享库):
 静态库是代码的归档,在使用静态库时是采用的复制代码的方式。共享库是可执行文件的组成部分,在使用共享库时是采用的提供代码在共享库的地址给可执行文件的方式。
C语言的编译预处理

GCC编译器:区分大小写

    gcc -E :  只做预处理,其它都不做,(.i)
    gcc -S :  检查语法错误等,生成汇编文件(.s)
    gcc -c : 完成汇编,不链接(.o)
    gcc -o :  修改目标文件名
    gcc    :  编译+链接,生成可执行文件,默认是 a.out
    gcc -Wall :  生成所有的警告信息(提示代码质量,少警告)
    Gcc -D宏名: 条件编译,用于版本选项开关

包含头文件的方法:
C语言的编译预处理

宏定义与使用分析:
C语言的编译预处理

内置宏:
C语言的编译预处理

条件编译使用:
 条件编译使得我们可以按不同的条件编译不同的代码段,因而可以产生不同的目标代码
  #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中较小的一个进行对齐
  偏移地址和成员占用大小均需对齐
  结构体成员的对齐参数为其所有成员使用的对齐参数的最大值结构体总长度必须为所有对齐参数的整数倍

#和##运算符使用:
C语言的编译预处理

推荐阅读:
  1. C语言之预处理
  2. C语言之预处理指令

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

编译 预处理 动态库

上一篇:【收藏】一篇快速帮企业转型区块链的锦囊

下一篇:Xcode 几个好用的插件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》