gpt4 book ai didi

c - 未设置 _GNU_SOURCE 时如何在 flex 规则中使用 asprintf?

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:16 30 4
gpt4 key购买 nike

为了保证asprintf函数在头文件中可见 <stdio.h> ,我遵循了手册页的建议并输入:

#define _GNU_SOURCE
#include <stdio.h>
// ... uses of asprintf();

这在普通的 C 程序中有效,但大概只在 GNU/Linux 上而不在 BSD 上有效。

我希望能够在 flex 词法分析器中使用相同的技巧,例如:

%{
#define _GNU_SOURCE
#include <stdio.h>
%}

%%

\"[^\"].+\" {
asprintf(&(yylval.string), "%s", yytext);
return STRING;
}

%%

// ...

但我收到了 implicit-function-declaration 的编译警告 ( asprintf ) .

经进一步调查,这是因为在 flex 生成的 C 文件中包含 <stdio.h>在我的序言代码之前,没有先定义 _GNU_SOURCE。

如何编写使用此函数的代码

  • 在 flex 规则中正确编译,并且
  • (可选)是否也适用于非 GNU 环境?

最佳答案

已重新检查the book这让我养成了使用 asprintf 的习惯,我发现它确实是一个 GNU 扩展。

它在名为 libiberty 的 GCC 库中可用,您可以使用它代替 _GNU_SOURCE 宏。

我能够使用以下方法在 Ubuntu 15.10 和 Debian 8.2 上安装它:

sudo apt-get install libiberty-dev

然后我修改了序言以包括:

%{
#include <libiberty/libiberty.h>
%}

一切正常,没有任何警告。

假设 libiberty 包可用于非 Linux 发行版(并且鉴于它是 GCC 的一部分,我认为情况就是如此),该解决方案应该可以跨平台(在 POSIX-ish 操作系统上)工作。

关于c - 未设置 _GNU_SOURCE 时如何在 flex 规则中使用 asprintf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596413/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com