为什么我在使用cygwin时不能使用环礁

时间:2014-06-05 18:06:03

标签: c++ c++11 cygwin

我正在使用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

但我无法理解他的解决方案在谈论><

梦想目标:

我想知道是否有办法摆脱这个问题,并且不需要每次都取消定义。如果我不能再解决这个问题,那将是很好的。

感谢所有愿意花时间解决这个奇怪问题的人^^

2 个答案:

答案 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