编辑:哎呀!我的意思是包括我的编译命令。我使用“g++ -g -o war war.h war.cpp”
编辑 2:这是我使用 gcc 版本 4.4.3 (Ubuntu 4.4.3-4ubuntu5) 编译的 Linux 服务器。另外,我试图重现该问题但无法重现,所以我现在真的不知道是什么原因造成的。
一时兴起,我决定用 C++ 制作一个战争(纸牌游戏)模拟器。我正在启动程序,我用我的所有#includes 编写了一个头文件,并将源代码放在另一个文件中。我不小心在头文件和源代码中都有#includes,当我尝试编译时,它开始给我所有这些错误说(例如):
war.cpp:3815:错误:程序war.cpp:3815:12中的杂散'\20':警告:忽略空字符war.cpp:3815:错误:程序war.cpp中的杂散'\21': 3815:错误:程序war.cpp:3815:18中的杂散“\ 231”:警告:忽略空字符war.cpp:3815:错误:程序war.cpp中的杂散“\ 20”:3815:20:警告:空字符被忽略war.cpp:3815:错误:程序war.cpp:3815中的杂散'\20':错误:程序war.cpp:3815中的杂散'\212':错误:杂散'\217 '在程序中
请记住,此时此程序的字符数小于 200,因此编译器将所有这些字符写入文件。我很快找出了问题所在并纠正了它,但我的问题是,这是怎么发生的?是什么导致编译器如此大量地写入程序?当我取消编译器时(看起来它会继续运行),文件在几秒钟内就从几百字节增长到近 13 MB。我不是专家,但似乎这种事情可能会产生安全隐患,特别是因为我是在我大学的 CS 部门服务器上通过 ssh 运行这个程序的。
对于它的价值,这是我编译时的代码:
战争.cpp:
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main()
{
vector< pair<int, suit> > deck1;
vector< pair<int, suit> >::iterator it1;
}
战争.h:
#ifndef WAR_H
#define WAR_H
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
enum suit { HEARTS, SPADES, CLUBS, DIAMONDS };
#endif