在 Gnome 库中的哪个位置定义了“True”和“False”?

在 Gnome 库中的哪个位置定义了“True”和“False”?

我正在尝试使用 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.hglade.h

#include <gnome.h>
#include <glade/glade.h>

...出色地?

答案1

如果你真的想说的话TRUEFALSE那么 /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等于0ElvTrue等于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)

但我不确定这会让你走得更远。

相关内容