忆往阁
当往事随风逝去,留下的只有回忆.


忆往阁 Yxsos.com 2017-2020
备案编号:赣ICP备15004477号

关于预编译文件“stdafx.h”和”stdafx.app”的原理

什么是预编译文件?

预编译头(precompiled header)是程序设计时把头文件编译为中间格式,以节约在开发过程中编译器反复编译该头文件的开销。——来自《维基百科》
可见预编译头的意义就是:防止反复编译某一个头文件
个人理解:当每一个CPP文件中如果都编译一次头文件的话,那么会拖慢整体的运行速度,所以把所有头文件都放进预编译头时,程序运行只进行一次编译,大大提高了运行速度

详细案例:(输出一个简单加法)

#include<iostream>

void main()
{
    using namespace std;
    int a = 10;
    int b = 20;
    int c = a+b;
    cout<<c<<endl;
    cin.get();
}

在上面的文件中我们调用了库
然后在借用cout endl cin.get() 来进行输入输出

但如果我们将库放在stdafx.h这个头文件里

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
// TODO: 在此处引用程序需要的其他头文件

那么每次在使用新的cpp文件时,只要调用一次#include "stdafx.h"即可

#include "stdafx.h"

void main()
{
    using namespace std;
    int a = 10;
    int b = 20;
    int c = a+b;
    cout<<c<<endl;
    cin.get();
}

额外要点
1.h头文件不能单独存在,必须配合.cpp才能使用,也就是说stdafx.h和stdafx.cpp二者缺一不可
2.需要调用其他库时只需在stdafx.h头文件中加入即可
3.但由于stdafx.h并不是通用的,所以使用这一头文件的代码仅在支持MFC的IDE下工作正常,如果迁移到其它平台,那么除非自行移植或构建stdafx.h,否则会出现编译错误。

2017-09-19
141 views
暂无评论

发表评论