Onde nas libs do Gnome, 'True' e 'False' são definidos?

1

Estou tentando compilar um programa com o gnome-libs, que usa True e False , em um dos argumentos. Mas qual arquivo de cabeçalho os define?

Estou recebendo o seguinte erro:

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)

Esta é uma parte do código em que esse erro ocorre:

    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 */

O arquivo inclui apenas gnome.h e glade.h :

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

... bem?

    
por polemon 02.10.2010 / 10:04

1 resposta

2

Se você realmente quis dizer TRUE e FALSE , então /usr/include/glib-2.0/glib/gmacros.h tem

#ifndef FALSE
#define FALSE   (0)
#endif

#ifndef TRUE
#define TRUE    (!FALSE)
#endif

Se você quis dizer algo mais, precisará especificar o que entende por gnome-libs com mais precisão.

adicionou um palpite bem razoável

As macros que você está faltando não estão definidas dentro do GTK, e o Elv* booleano parece ser um tipo enumerado na Elvis Text Editor :

enum {ElvFalse, ElvTrue} ELVBOOL;

Eu suspeito que esse código foi emprestado de algum outro codebase e perdeu seus cabeçalhos. Sem surpresa, isso torna ElvFalse equivalente a 0 e ElvTrue igual a 1 (pelo menos no hemisfério sul, eu ouço as coisas de trás para o norte).

Dado o protótipo:

void gtk_menu_item_configure(GtkMenuItem *menu_item,
         gint show_toggle_indicator,
         gint show_submenu_indicator);

os valores 0 e 1 parecem bons palpites quanto ao valor das constantes.

adicionado em resposta ao comentário

De elvis-2.2_0 / doc / bugs.txt:

/ Elvis' BOOLEAN and data type may clash with a standard one. Change its name, and the names of the True and False values.

Onde o / é a bandeira do autor "que acredito que tenha foi resolvido. "Que é peculiar quando aparece

... ElvFalse,False)

no código. Mas mais problemático ainda é em guignome / README.gnome (datado de outubro de 2003):

The Gnome/GTK+ GUI extension to Elvis is being written by David Alan Gilbert ([email protected]). It is very much in it's development stages!

Eu não posso criar o Elvis 2.2 no Unbuntu Maverick para defeitos diferentes dos que você reporta (em guix11 ) e os repositórios mais recentes do Debian / Ubuntu não carregam nenhuma versão do Gnome do X11 do Elvis. Como a página principal do Elvis foi atualizada há dois anos, duvido que a versão do Gnome tenha trabalhado ou trabalhado com o Gnome moderno.

Dito isto, não há mal nenhum em tentar

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

mas não tenho certeza de que você chegará longe.

    
por 02.10.2010 / 13:59