web-dev-qa-db-ja.com

Gnome libsのどこで、「True」と「False」が定義されていますか?

引数の1つにTrueFalseを使用するgnome-libsを使用してプログラムをコンパイルしようとしています。しかし、どのヘッダーファイルがそれらを定義していますか?

次のエラーが発生します:

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
polemon

本当に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*ブール値は Elvis Text Editor :で列挙型のように見えます。

enum {ElvFalse, ElvTrue} ELVBOOL;

このコードは他のコードベースから借用され、ヘッダーを失ったと思われます。当然のことながら、これによりElvFalse0に等しくなり、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月付け)です。

ElvisのGnome/GTK + GUI拡張機能は、David Alan Gilbert([email protected])によって作成されています。非常に開発段階です!

UnbuntuMaverickでElvis2.2を、あなたが報告したものとは異なる欠陥(guix11)で構築することはできません。また、最新のDebian/Ubuntuリポジトリには、GnomeバージョンのelvisのみX11が搭載されていません。 Elvisのメインページが最後に更新されたのは2年前なので、Gnomeバージョンがこれまでに機能したかまたは最新のGnomeで機能するかどうかは疑問です。

とはいえ、試してみても害はありません

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

しかし、それがあなたを遠ざけるかどうかはわかりません。

2
msw