Gnomeライブラリのどこに「True」と「False」が定義されていますか?

Gnomeライブラリのどこに「True」と「False」が定義されていますか?

True私はgnome-libsを使用して引数の1つを使用するプログラムをコンパイルしようとしています。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ですElvTrue1少なくとも南半球では北半球ではその反対が事実だと聞きました)。

プロトタイプが与えられたら:

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月作成)です:

David Alan Gilbertが作成したElvis Gnome / GTK + GUI拡張([Eメール保護])。開発段階です!

バグはguix11あなたが報告したものとは異なり、最新のDebian / UbuntuリポジトリにはGnomeバージョンのelvisがなく、X11のみが含まれているため、Unbuntu MaverickでElvis 2.2を構築することはできません。メインのElvisページが2年前に最後に更新されたため、Gnomeのバージョンが最新のGnomeと連携しているかどうか疑問に思います。

つまり、試してみても悪いことはありません。

#define False (0)
#define True (!False)

しかし、それがあなたを非常に遠くまで連れて行くかどうかはわかりません。

おすすめ記事