Locked. This question and its answers are locked,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。
我在编译我编写的C++程序时遇到了一些困难。
该程序非常简单,据我所知,它符合C++标准中列出的所有规则。我已经阅读了两次完整的ISO/IEC 14882:2003以确保。
该程序如下:
这是尝试使用Visual C++ 2010编译此程序时收到的输出:
沮丧的是,我尝试了g++ 4.5.2,但同样没有帮助:
我认为Clang(3.0版主干127530版)必须能够工作,因为它的标准一致性倍受赞誉。不幸的是,它甚至没有给我提供其漂亮的,突出显示的错误消息之一:
老实说,我真的不知道这些错误消息的含义。
许多其他C++程序都具有带有.cpp扩展名的源文件,因此我想也许我需要重命名文件。我将其名称更改为helloworld.cpp,但这没有帮助。我认为Clang中存在一个非常严重的错误,因为当我尝试使用它来编译重命名的程序时,它突然退出,并显示“84警告和20错误生成”。让我的电脑发出很多哔哔声!
我在这里做错了什么?我是否错过了C++标准的某些关键部分?还是所有三个编译器真的都坏到无法编译这个简单程序的程度?
我在编译我编写的C++程序时遇到了一些困难。
该程序非常简单,据我所知,它符合C++标准中列出的所有规则。我已经阅读了两次完整的ISO/IEC 14882:2003以确保。
该程序如下:
这是尝试使用Visual C++ 2010编译此程序时收到的输出:
c:\dev>cl /nologo helloworld.png
cl : Command line warning D9024 : unrecognized source file type 'helloworld.png', object file assumed
helloworld.png : fatal error LNK1107: invalid or corrupt file: cannot read at 0x5172
沮丧的是,我尝试了g++ 4.5.2,但同样没有帮助:
c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
我认为Clang(3.0版主干127530版)必须能够工作,因为它的标准一致性倍受赞誉。不幸的是,它甚至没有给我提供其漂亮的,突出显示的错误消息之一:
c:\dev>clang++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
clang++: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
老实说,我真的不知道这些错误消息的含义。
许多其他C++程序都具有带有.cpp扩展名的源文件,因此我想也许我需要重命名文件。我将其名称更改为helloworld.cpp,但这没有帮助。我认为Clang中存在一个非常严重的错误,因为当我尝试使用它来编译重命名的程序时,它突然退出,并显示“84警告和20错误生成”。让我的电脑发出很多哔哔声!
我在这里做错了什么?我是否错过了C++标准的某些关键部分?还是所有三个编译器真的都坏到无法编译这个简单程序的程度?
最佳答案
在标准中,第2.1/1条规定:
您的编译器不支持该格式(也无法将其映射到基本源字符集),因此它无法进入进一步的处理阶段,因此会出现错误。编译器完全有可能支持从图像到基本源字符集的映射,但不是必需的。
由于此映射是实现定义的,因此您需要查看实现文档以查看其支持的文件格式。通常,每个主要的编译器供应商都支持(规范定义)文本文件:文本编辑器生成的任何文件,通常是一系列字符。
请注意,C++标准基于C标准(第1.1/2节),而C(99)标准在第1.2节中说:
因此,同样,您需要在编译器文档中找到对源文件的处理。