我正在尝试使用 gnome-libs 编译一个程序,该程序在参数之一中使用True
和。False
但是什么头文件定义了它们呢?
我收到以下错误:
guignome/guignome.c: In function ‘gui_MenuBarEntryShown’:
guignome/guignome.c:1060: error: ‘False’ undeclared (first use in this function)
[...]
guignome/guignome.c: In function ‘creategw’:
guignome/guignome.c:1309: error: ‘True’ undeclared (first use in this function)
guignome/guignome.c:1319: error: ‘False’ undeclared (first use in this function)
这是发生此错误的代码部分:
if (optvaltext!=NULL) {
if (strcmp(optvaltext,wme->menuentry->optvalue)) {
gtk_menu_item_configure(GTK_MENU_ITEM(wme->menuentrywidget),ElvFalse,False);
} else {
gtk_menu_item_configure(GTK_MENU_ITEM(wme->menuentrywidget),ElvTrue,False);
};
}; /* optvaltext!=NULL */
该文件仅包含gnome.h
和glade.h
:
#include <gnome.h>
#include <glade/glade.h>
...出色地?
答案1
如果你真的想说的话TRUE
,FALSE
那么 /usr/include/glib-2.0/glib/gmacros.h 有
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
如果您的意思是其他意思,则需要gnome-libs
更准确地说明您的意思。
添加了一个相当合理的猜测
您缺少的宏没有在 GTK 中定义任何内容,并且Elv*
布尔值似乎是猫王文本编辑器:
enum {ElvFalse, ElvTrue} ELVBOOL;
我怀疑这段代码是从其他代码库借用的,并且丢失了其标头。毫不奇怪,这ElvFalse
等于0
和ElvTrue
等于1
(至少在南半球,我听说北半球的情况是相反的)。
给定原型:
void gtk_menu_item_configure(GtkMenuItem *menu_item,
gint show_toggle_indicator,
gint show_submenu_indicator);
对于常量的值,值 0 和 1 似乎是很好的猜测。
添加以回复评论
来自 elvis-2.2_0/doc/bugs.txt:
/ Elvis 的 BOOLEAN 和数据类型可能与标准类型冲突。更改其名称以及 True 和 False 值的名称。
其中,/
作者的标志是“我相信问题已经解决”。当出现时这是奇特的
... ElvFalse,False)
在代码中。但更麻烦的仍然是 guignome/README.gnome(日期为 2003 年 10 月):
Elvis 的 Gnome/GTK+ GUI 扩展由 David Alan Gilbert 编写([电子邮件受保护])。它正处于发展阶段!
我无法在 Unbuntu Maverick 上构建 Elvis 2.2,因为其缺陷与您报告的(在guix11
)中不同,并且最新的 Debian/Ubuntu 存储库不包含 elvis 的 Gnome 版本,仅包含 X11。由于 Elvis 主页面的最后一次更新是在两年前,我怀疑 Gnome 版本曾经工作过或与现代 Gnome 一起工作过。
也就是说,尝试一下并没有什么坏处
#define False (0)
#define True (!False)
但我不确定这会让你走得更远。