c++ - FILE * 不是左值吗?

标签 c++

尝试破译我的第一个大程序,在那种情况下,它是一个 LISP 解释器。对于理解别人的代码的世界,我是全新的,而且它似乎比自己编写代码要复杂得多。

我目前的困难很难产生一个最小化版本,因为我目前的困难在于最小化现有代码以便更好地掌握它,而且我几乎在每次尝试修改时都会遇到错误。

解释器使用 Current_Input 和 Current_Output 全局变量来抽象读写文件和小部件。我只是想让它写入标准输出。

相关行是:

Current_Output = alloc_objet(sizeof(Widget *));
objet_type(Current_Output) = OWIDGET;
Owidget(Current_Output) = Wtext;

分配一个对象( super 类型),告诉它它的真实类型是“WIDGET”,并将 Widget Wtext 分配给它。

OFILE类型已经存在,并且有一个类似于Owidget宏的Ofile宏,这里都是:

#define Owidget(objet) (* ((output_widget) objet + JMP))
#define Ofile(objet) ((FILE *) objet + JMP)

我想这样替换三个相关行:

Current_Output = alloc_objet(sizeof(FILE *));
objet_type(Current_Output) = OFILE;
Ofile(Current_Output) = stdout;

产生以下错误:

error: lvalue required as left operand of assignment Ofile(Current_Output) = stdout;

这一行:

printf("%d", Ofile(Current_Output));

产生这个警告:

warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘FILE* {aka _IO_FILE*}’ [-Wformat=]

让我相信我在窃听行的左侧有一个 FILE *,我想将另一个 FILE * 分配给 stdout。

这里有什么问题? 谢谢!

最佳答案

FILE* 是一种类型,它没有右值/左值。

您正在传递 ((FILE *) objet + JMP),这是一个临时的右值。

关于c++ - FILE * 不是左值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548640/

相关文章:

C++ 程序试图加倍释放自定义对象

c++ - 在 PostgreSQL 中使用 C++ 函数

c++ - 标题困惑。编译器不识别数据类型

C++ 动态增加对象数组的数组大小?

c++ - 红黑树无效转换

c++ - 如何在依赖的静态库中链接 Boost

c++ - 作为好友的成员函数 : Is the book Lippman 5th wrong?

c++ - wxTextEntryDialog 翻译确定和取消

c++ - std::is_convertible 的可变参数版本?

c++ - 获取成员函数内部成员函数的地址