Gnome 라이브러리의 어디에 "True"와 "False"가 정의되어 있습니까?

Gnome 라이브러리의 어디에 "True"와 "False"가 정의되어 있습니까?

True나는 gnome-libs를 사용하여 인수 중 하나를 사용하는 프로그램을 컴파일하려고 합니다 . 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월 작성)입니다:

David Alan Gilbert가 작성한 Elvis Gnome/GTK+ GUI 확장([이메일 보호됨]). 개발단계에요!

버그가 guix11귀하가 보고한 것과 다르고 최신 Debian/Ubuntu 저장소에는 Gnome 버전의 elvis가 없고 X11만 포함되어 있기 때문에 Unbuntu Maverick에서 Elvis 2.2를 빌드할 수 없습니다. 메인 Elvis 페이지가 2년 전에 마지막으로 업데이트되었기 때문에 Gnome 버전이 최신 Gnome과 작동했거나 작동한 적이 있는지 의심됩니다.

즉, 시도해봐도 나쁠 것은 없습니다.

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

하지만 그것이 당신을 아주 멀리까지 데려갈지는 확신할 수 없습니다.

관련 정보