当前位置:  开发笔记 > 编程语言 > 正文

C++中的getline() - 不需要_GNU_SOURCE?

如何解决《C++中的getline()-不需要_GNU_SOURCE?》经验,为你挑选了1个好方法。

首先,我对C++很陌生.我认为这getline()不是标准的C函数,因此#define _GNU_SOURCE需要使用它.我现在正在使用C++,g ++告诉我_GNU_SOURCE已经定义了:

$ g++ -Wall -Werror parser.cpp
parser.cpp:1:1: error: "_GNU_SOURCE" redefined
: error: this is the location of the previous definition

任何人都可以确认这是标准的,还是隐藏在我的设置中的某个地方?我不确定所引用的最后一行的含义.

文件的包含如下,所以可能是它们中的一个或多个定义了?

#include 
#include 
#include 
#include 
#include 
#include 

谢谢!



1> paxdiablo..:

我认为从版本3开始,g ++会自动定义_GNU_SOURCE.错误的第三行支持这一点,指出第一个定义是在命令行上完成的(-D_GNU_SOURCE看到了nary ):

: error: this is the location of the previous definition

如果您不想要它,#undef它将作为编译单元的第一行.但是,您可能需要它,在这种情况下使用:

#ifndef _GNU_SOURCE
    #define _GNU_SOURCE
#endif

您收到错误的原因是因为您正在重新定义它.如果将其定义为已有的,则不应该是错误.至少在C的情况下,它可能与C++不同.基于GNU标题,我会说它们是隐含的-D_GNU_SOURCE=1,这就是为什么它认为你重新定义为其他东西.

如果您没有更改它,以下代码段应该告诉您它的值.

#define DBG(x) printf ("_GNU_SOURCE = [" #x "]\n")
DBG(_GNU_SOURCE); // first line in main.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有