【发布时间】:2017-11-30 13:08:31
【问题描述】:
我正在尝试在我的 C 代码中使用 open_memstream 函数。但是我似乎无法编译它。最小的工作示例如下:
#include <stdio.h>
int main(void) {
char *buf;
size_t sz;
FILE *stream = open_memstream(&buf, &sz);
putc('A', stream);
fclose(stream);
}
而且我也使用下面的命令来编译它:
gcc -std=c99 -o test test.c
经过一番研究,我发现在包含stdio.h之前需要定义一个宏。但是下面的示例代码无济于事。
#define __USE_POSIX
#define __USE_XOPEN
#include <stdio.h>
抛出以下编译器警告;我认为第二个警告是因为第一个警告。
test.c:7:17: warning: implicit declaration of function ‘open_memstream’ [-Wimplicit-function-declaration]
FILE *stream = open_memstream(&buf, &sz);
^
test.c:7:17: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
【问题讨论】:
-
错误的宏。永远不要定义那些。阅读
man open_memstream。 -
另外,我看不出有任何问题。无论您对这些警告(不是错误,顺便说一句)感到困惑,我们都无法读懂您的想法。您需要告诉我们其中哪些部分让您感到困惑,以便我们帮助纠正这种困惑。
-
@Sebivor "这不是错误" 请不要大声说出来,有人可能会觉得你不知道他们是致命的。
-
@n.m. “它们是致命的”对于任何实现定义的东西都是无效的,因为它们可能不在某些系统上。您是否有任何确凿的资料来支持该声明?
-
@Sebivor“警告”在标准中不存在。该标准讨论了诊断。我不是在谈论标准。我说的是来自这个特定实现的这些特定警告。