预处理基础知识与示例代码实现

预处理阶段完成的事情:
1、取消注释,
2、宏替换,
3、头文件展开,
4.、条件编译。
先来熟悉几个常见预处理标识符,直接通过示例代码实现:

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

运行结果

define宏替换步骤
1.在调用宏时,首先对参数进行检查,看看是否包含了任何由define定义的符号。如果是,它们首先被替换。
2.替换文本随后被插入到程序中原来文本的位置。对于宏,参数值被它们的值所替代。
3.最后,再次对结果文本进行检查,若包含define定义的符号 ,就重复上述步骤。
但是,宏不可以出现递归,通俗来讲,宏中不能在调用自身宏。

#include <stdio.h>
#define PRINT(FORMAT,VALUE)    \
    printf("the value of "#VALUE   \
    " is "FORMAT"\n",VALUE)
    int main()
    {
        int x=10;
        PRINT("%d", x + 5);
        system("pause");
        return 0;
    }

LINUX下代码预处理阶段:
这里写图片描述

运行结果

#include <stdio.h>
#define STR1 "hello"
#define STR2 "world"
#define STR1STR2 "hello bit"
#define PRINT(a,b)\
    STR1##STR2
int main()
{
    printf("%s\n", PRINT(STR1, STR2));
    system("pause");
    return 0;
}

运行结果

define定义的宏与函数
宏只是简单的替换,宏与类型无关
宏是在预处理阶段被替换,函数是在代码运行阶段被调用生成。宏与函数各有优劣,使用时需适当选择,详细内容参见(C和指针P285)的表格。
宏在使用时,需要注意优先级问题,解决这种问题,就是加上一对()。
此处就不再举例。
编译链接的每个过程
以LINUX具体代码实现为例说明编译链接的整个过程:
源程序

源程序
1、预处理阶段

预处理
2、编译阶段(C语言代码–>汇编代码)

编译
3、汇编阶段(汇编代码–>二进制代码)

汇编
4、链接阶段
将多个二进制程序链接成可执行程序。

完成了翻译阶段的4个任务,接下来就是执行阶段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值