预处理标识符,宏和函数区别,编译连接过程。

1.熟悉预处理标识符:
__LINE__:进行编译的源文件。(为整形常量)
__FILE__:文件当前行号(LINE所处第几行)(为字符串)
__DATE__:文件被编译的时间(为字符串)
__TIME__:编译程序文件时间(为字符串)
如:printf ("file:%s\tline:%d\tdate:%s\ttime:%s\n",__FILE__ ,__LINE__,__DATE__,__TIME__ )
#                :将其后面的宏参数进行字符串化操作。
##               :把位于它两边的符号连接成一个符号。

2.宏和函数的区别
 1)、代码长度:宏是完全替换,插入到程序里使得代码变长;函数代码是只出现在一个地方,使用时则去那里调用。
 2)、执行速度:宏更快一些,因为在预编译阶段都已完成; 函数则慢一点,,因为需要调用以及返回(压栈/出栈)额外时间。
 3)、操作符优先级:宏有时要少加括号而导致计算逻辑出错; 函数最后只将值返回来,结果容易预测。
 4)、参数求值:宏每次都要计算;函数只需要计算一次,之后多次调用并不会导致多次求值而出错。
 5)、参数类型:宏不关心类型,只要参数操作合法就可以;函数类型要一致,不同类型则需要不同函数。

3.理解编译链接的整个过程和详细的每个过程
 1).预处理
 在此步骤对代码进行预处理:头文件展开,宏替换,去注释,条件编译;
 gcc -E test.c -o test.i
 此命令是对test.c进行到预处理,并将处理结果放到test.i中。
 2).c代码转换为汇编;
 gcc -S test.i -o tets.s
 此命令是对test.i进行汇编转换,并将汇编转换结果放入test.s中。
 3).汇编——>二进制;
 gcc -c test.s -o test.o
 此处test.o是目标文件,其中存放的是二进制序列;
 4).链接
 链接所有二进制程序,生成可执行文件。
gcc test.o -o mytest   //(任意命名)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值