2015-01-25 19 views
6

Während xterm Kompilieren stieß ich auf eine Konfigurationsoption namensWas ist ein schmaler Prototyp und warum brauche ich einen?

--enable-narrowproto enable narrow prototypes for X libraries 

(Die Negation dieser Option ist erforderlich, um die Scrollbar Arbeit unter Cygwin zu machen, zusammen mit --disable-imake.)

Ich weiß, dass in K & RC-Prototypen existierten nicht und alle Argumente, die kleiner als int oder double waren, wurden befördert. Die Suche nach dem ISO C99 Standard war leer. Was genau ist ein Narrow Prototyp? Gibt es einen Wide Prototyp für Symmetrie? Welches potentielle Problem entsteht, wenn ich keinen engen Prototyp verwende?

+1

Was ergab die Suche nach 'xterm's Quellen und Makefiles? – alk

+0

Haben Sie die 'INSTALL'-Datei im' xterm'-Quellcode gelesen? –

+0

@alk Eine Menge von autoconf/configure/imake Geheimnis. Es setzt das Makro -DNARROWPROTO von xterm unbenutzt. Also muss es ein X-Ding sein. – Jens

Antwort

5

Die NARROWPROTO Makro in Xfuncproto.h verwendet wird, ein anderes Makro

#ifdef NARROWPROTO 
#define NeedWidePrototypes 0 
#else 
#define NeedWidePrototypes 1  /* default to make interropt. easier */ 
#endif 

NeedWidePrototypes die wiederum in Xlib.h beispielsweise in der folgenden Art und Weise

extern XModifierKeymap *XInsertModifiermapEntry(
    XModifierKeymap* /* modmap */, 
#if NeedWidePrototypes 
    unsigned int /* keycode_entry */, 
#else 
    KeyCode  /* keycode_entry */, 
#endif 
    int   /* modifier */ 
); 

KeyCode ist ein typedef von X.h

wird definiert,
typedef unsigned char KeyCode; 

so denke ich narrow hier, verweist auf die Breite des Typs für KeyCode.

Das gleiche Konstrukt für die gleiche typedef auch in anderen Dateien gefunden werden, zum Beispiel XKBlib.h

+0

Danke! Also * schmaler Prototyp * ist im Allgemeinen kein C-Sprachen-Jargon, sondern bezieht sich auf X11-spezifische Breiten bestimmter Typen wie 'KeyCode'. – Jens

1

Außer in wobei anzumerken ist INSTALL, war es auch eine FAQ finden Sie Why doesn't the scrollbar work? für ein paar Jahre topische (auch die Hinweise in der change-log without 2006)

+0

Thomas, ich weiß, dass du der xterm Maintainer bist. Wenn dies eine FAQ ist, verwenden Cygwin die Standardkonfigurationsoptionen mit engen Prototypen. Ist es möglich, das Konfigurationsskript zu ändern, um die richtigen (Arbeits) -Optionen zu verwenden, wenn es auf Cygwin ausgeführt wird? Betrachtet man das configure-Skript für xterm-314, Zeile 14682, legt es explizit cf_default_narrowproto = yes für '* cygwin *' fest, wenn es no sein sollte, um out-of-the-box zu funktionieren. – Jens

+0

Ich vermute ja - ich hatte die Standardeinstellungen auf der Grundlage der Imake-Konfiguration festgelegt - beachten Sie, dass das Revisionsdatum für das Makro 2006 ist. Seit 2006 ist es möglich, dass jemand die Standardkonfiguration für Cygwin-X geändert hat –