【问题标题】:Why can't I use atoll while using cygwin为什么我在使用cygwin时不能使用环礁
【发布时间】:2014-06-05 18:06:02
【问题描述】:

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

但我不明白他的解决方案在说什么>

梦想目标:

我想知道是否有办法摆脱这个问题并且不需要每次都取消定义。如果我不能再处理这个问题,那就太好了。

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

【问题讨论】:

  • 如果您在 Google 上搜索并找到了有用的页面,请在您的问题中包含该链接。
  • 为什么还要使用atoll?它在失败时返回 0,因此无法区分“0”和“x”。仅当您已经知道输入是有效数字或不允许 0 时,它才是可靠的。
  • 特别是没有遇到Christian提到的问题的等效函数是strtoll

标签: c++ c++11 cygwin


【解决方案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__。所以,如果你想使用它,上面是最好的方法。

【讨论】:

    【解决方案2】:

    我用以下代码进行了测试:

    #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
    

    【讨论】:

    • 我也是。最大的问题是我必须编辑 Makefile 才能使其工作,而这是我不想做的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多