预处理阶段知识概要

1.预处理阶段
1).实现的作用: 
  (1)实现宏替换
  (2)将使用的头文件的展开
  (3)取消注释
  (4)条件编译              
在unix编译中,预处理指令 gcc -E test.c test.i
下面在unix编写一个的简单的程序展示下
代码
这里写图片描述
预处理后结果
这里写图片描述
2).熟悉预处理标识符

__FILE__//进行编译的源文件名
__LINE__//文件当前行的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
#argument//宏参数转换为一个字符串argument
##//将位于两边的符号连接成一个符号

下面写个例子来进一步了解

#include <stdio.h>
#include <Windows.h>
int main()
{
    printf("file:%s\n", __FILE__);
    printf("line:%d\n", __LINE__);
    printf("date:%s\n", __DATE__);
    printf("time:%s\n", __TIME__);
    system("pause");
    return 0;
}

这里写图片描述

#include <stdio.h>
#include <Windows.h>
#define M 30
#define PRINTF(FORMAT,VALUE)\
printf("the number of " #VALUE " is " FORMAT"\n", VALUE)
int main()
{
    PRINTF("%d", M);
    system("pause");
    return 0 }


这里写图片描述

#include <stdio.h>
#include <Windows.h>
#define XHAME(a,b) (int)a##b
int main()
{
    printf("%d\n",XHAME(2,3));
    system("pause");
    return 0;

}

这里写图片描述

2.宏与函数的区别
宏(#define):每次都需要在代码块中替换,所以代码的长度会大幅度增加。执行速度提高。宏参数的求值与表达式的上下程序有关,除非加上括号,就会产生由于操作符优先级带来的不可预料的结果。每次用于宏定义时,都将重新求值,会产生副作用。宏与类型无关。
函数:函数代码出现于一个地方,只需要调用不需要替换,代码长度较短。由于函数调用、返回值存在额外开销。函数只求值一次,多次使用参数不会导致多种求值过程,不会导致特殊问题。函数的参数与类型有关。
3.理解编译链接的整个过程和详细的每个过程
1)预处理阶段
unix下的指令:gcc -E test.c -o test.i(test.c为源代码)
2)编译——c语言代码转换为汇编代码
unix下的指令:gcc -S test.i -o test.s
3)汇编———汇编代码转换为二进制
unix指令:gcc -c test.i -o test.o
4)链接——将二进制代码链接成一个可执行程序
gcc test.o -o test1
./test1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值