我正在使用cygwin并尝试使用以下命令编译文件。
$g++ -std=c++0x test.cpp -o test
但是cygwin告诉我环礁未定义。然后我稍微google了一下,发现这是cygwin的问题。
有些网站说我可以设置一些东西来禁用-ansi-std = c98效果,但我不明白该怎么做。
有人可以向我解释为了解决问题我该怎么办?
我会把我找到的网站(其他人用中文写成):
disable effect of -ansi -std=c89 on system include files
但我无法理解他的解决方案在谈论><
我想知道是否有办法摆脱这个问题,并且不需要每次都取消定义。如果我不能再解决这个问题,那将是很好的。
感谢所有愿意花时间解决这个奇怪问题的人^^
答案 0 :(得分:1)
标头文件中存在问题。修补程序可能不会非常困难,但是(可能)更简单的解决方案是在编译行上取消定义__STRICT_ANSI__
。
g++ -std=c++0x -U__STRICT_ANSI__ test.cpp -o test
@R Sahu的-std=c++0x
和-std=c++11
测试代码对我有用。
实际上,我认为我错了。我认为Cygwin是对的。 atoll
不是__STRICT_ANSI__
。所以,如果你想使用它,以上是最好的方法。
答案 1 :(得分:0)
我使用以下代码进行了测试:
#include <stdlib.h>
#include <iostream>
int main(int argc, char** argv)
{
std::cout << atoll(argv[1]) << std::endl;
}
对我有用的是什么:
g++ test-130.cc -o test-130
什么对我不起作用:
g++ -std=c++0x test-130.cc -o test-130
g++ -std=c++11 test-130.cc -o test-130