我有一段代码如下所示.假设它位于名为example.cpp的文件中
#include <fstream>
#include <string> // line added after edit for clarity
int main() {
std::string filename = "input.txt";
std::ifstream in(filename);
return 0;
}
在Windows上,如果我在命令g example.cpp中键入cmd,它将失败.这是一个很长的错误列表,我认为主要是由于链接器抱怨无法从字符串转换为const char *.
但是如果我使用像这样的附加参数运行编译器:g -std = c 17 example.cpp,它将编译并正常工作而没有任何问题.
当我运行前命令时会发生什么?我猜测C编译器的默认版本标准被调用,但我不知道哪个?作为程序员/开发人员,我应该总是使用后一个命令和额外的参数吗?
解决方法:
如果您的g版本晚于4.7,我认为您可以找到支持的C标准的默认版本,如下所示:
g++ -dM -E -x c++ /dev/null | grep -F __cplusplus
我的机器的一个例子:
mburr@mint17 ~ $g++ --version | head -1
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
mburr@mint17 ~ $g++ -dM -E -x c++ /dev/null | grep -F __cplusplus
#define __cplusplus 199711L
一些参考:
> Details on the g++
options used
> Why this only works for g++
4.7 or later
标签:c,g,mingw 来源: https://codeday.me/bug/20190930/1836130.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。