我有用 g++ 版本 3.something 愉快地编译的代码。然后我想构建一些其他包含 C++11 符号的代码,所以我升级到 g++ 4.7。现在我的原始代码没有构建。我得到错误:
'fdopen' 未在此范围内声明
根据手册页, fdopen() 在我包括在内的 stdio.h 中声明。我不确定它是否相关,但我在 Cygwin 环境中工作。我使用的 g++ 的确切版本是 Cygwin 提供的 4.7.2 版本。
自从我切换编译器以来,我没有更改此代码,我可以肯定地确认它已构建并且我的测试代码运行并通过了以前的编译器。
根据要求,演示问题的示例代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int fd;
FILE *fp;
fd = open("test.txt", (O_WRONLY | O_CREAT | O_EXCL), S_IRWXU);
if(0 < fd)
{
fp = fdopen(fd, "wb");
fprintf(fp, "Testing...\n");
fclose(fp);
}
return 0;
}
# g++ -std=c++11 -o test test.cpp
test.cpp: In function 'int main(int, char**)':
test.cpp:14:29: error: 'fdopen' was not declared in this scope