关于预编译如何选,预编译真的很好吗?

这两个都可以实现我的需求,不过预编译是参考书给我的代码

我自己没用预编译,而且我刚了解到预编译

可以帮我解答一下吗?

预编译比我的那个好吗?

 

#include<stdio.h>
int main()
{
    int nian, tian;//年,天
    nian = 24;//24年
    tian = 365;//365天
    printf("我的年龄为%d\n共计天数%d", nian, nian*tian);
    return 0;
}

#include<stdio.h>
#define DAY 365
int main()
{
    int nian, tian;
    nian = 24;
    tian = nian * DAY;
    printf("我的年龄为%d\n共计天数%d", nian, tian);
    return 0;
}

预编译中主要包括宏定义、文件包含、条件编译。

其中宏替换即#define 宏名 宏体会在程序运行之前完成,不占用运行时间,程序的执行效率高。

把DAY写成预编译过程中处理的宏常量,有助于编译器把立即数写入二进制代码。想你的第一段代码那样写int(不加const)的话,计算机实际执行代码的过程中很可能还是要从主存取数据,而源码中宏产生的立即数是直接写进CPU的指令寄存器的,不需要额外访存。访存是非常慢的过程,计算机CPU访问主存的时间足够执行很多很多其他指令,因此,相比于大量引用变量的程序,大型工程中善用宏等编译期特性可以显著提升程序性能。但很多时候我们需要做取舍,提高性能不能以过度降低可读性为代价。

如果你用const int而不是int,那么时间性能上估计不会与宏差太多(编译优化有能力处理这种事),但是我试过,const int仍然会在主存中产生空间开销,而宏不会。但这不代表用宏产生的代码体积一定比用const小,这得具体情况具体分析。