引数の1つにTrue
とFalse
を使用する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.h
とglade.h
のみが含まれています。
#include <gnome.h>
#include <glade/glade.h>
...上手?
本当に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*
ブール値は Elvis Text Editor :で列挙型のように見えます。
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([email protected])によって作成されています。非常に開発段階です!
UnbuntuMaverickでElvis2.2を、あなたが報告したものとは異なる欠陥(guix11
)で構築することはできません。また、最新のDebian/Ubuntuリポジトリには、GnomeバージョンのelvisのみX11が搭載されていません。 Elvisのメインページが最後に更新されたのは2年前なので、Gnomeバージョンがこれまでに機能したかまたは最新のGnomeで機能するかどうかは疑問です。
とはいえ、試してみても害はありません
#define False (0)
#define True (!False)
しかし、それがあなたを遠ざけるかどうかはわかりません。