C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译。这个时候的 C++ 仍然在使用C语言的库:
stdio.h、stdlib.h、string.h 等头文件依然有效;
后来 C++ 引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是std。std 是 standard 的缩写,意思是“标准命名空间”。
和C语言一样,C++ 头文件仍然以.h为后缀。
很多用老式 C++ 开发的程序,它们的代码中并没有使用命名空间,直接修改原来的库会带来一个很严重的后果:程序员会因为不愿花费大量时间修改老式代码而极力反抗,拒绝使用新标准的 C++ 代码。
C++ 开发人员想了一个好办法,保留原来的库和头文件,它们在 C++ 中可以继续使用,然后再把原来的库复制一份,在此基础上稍加修改,把类、函数、宏等纳入命名空间 std 下,就成了新版 C++ 标准库。这样共存在了两份功能相似的库,使用了老式 C++ 的程序可以继续使用原来的库,新开发的程序可以使用新版的 C++ 库。
为了避免头文件重名,新版 C++ 库也对头文件的命名做了调整,去掉了后缀.h,所以老式 C++ 的iostream.h变成了iostream,fstream.h变成了fstream。而对于原来C语言的头文件,也采用同样的方法,但在每个名字前还要添加一个c字母,所以C语言的stdio.h变成了cstdio,stdlib.h变成了cstdlib。
#include <iostream>
#include <string>
int main(){
//声明命名空间std
using namespace std;
//定义字符串变量
string str;
//定义 int 变量
int age;
//从控制台获取用户输入
cin>>str>>age;
//将数据输出到控制台
cout<<str<<"已经成立"<<age<<"年了!"<<endl;
return 0;
}
stdafx.h 是 Visual C++ 的预编译头(Precompiled Header, PCH) 默认文件:
不是 C++ 标准的一部分
只属于 MSVC / Visual Studio
用来 加快编译速度
VS2019 的很多 旧模板 / MFC / Win32 项目 默认都会用它。
原因 2:VS2019 新项目默认用的是 pch.h,不是 stdafx.h
原因:
Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。
由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻。
打开stdafx.h文件,如下:
stdafx.cpp文件:
#include "stdafx.h"
说明你的工程里没有stdafx.h这个文件
这个是用来支持预编译头等功能,如果你用vs创建c++工程,他会帮你默认生成一个。
解决办法:
解决VS2010子目录中的.cpp文件引用上一级目录的stdafx.h找不到定义的问题
由于stdafx.h文件的特殊性,不能直接使用#include “../stdafx.h”方法解决,通过网上查找资料,发现以下方法可以解决问题,
属性->配置属性->C/C++->常规->附加包含目录
添加$(ProjectDir),此时在进行编译就不会出现找不到stdafx.h的错误了。查看Macro,得知$(ProjectDir)就是指向 Source目录的路径,而stdafx.h文件就在该目录下
F:\stock\TskingVS2019\src\Client\StkUI\
