什么是狭窄的原型,为什么我需要一个?

时间:2015-01-25 14:41:13

标签: c function-prototypes

在编译xterm时,我遇到了一个名为

的配置选项
--enable-narrowproto    enable narrow prototypes for X libraries

(需要取消此选项才能使滚动条在Cygwin下与--disable-imake一起使用。)

我知道在K& R C中,原型并不存在,并且所有小于intdouble的参数都会进行促销。搜索ISO C99标准是空的。究竟什么是原型?对称性是否有原型?如果我不使用狭窄的原型,会出现什么样的潜在问题?

2 个答案:

答案 0 :(得分:5)

NARROWPROTO中使用Xfuncproto.h宏来定义另一个宏

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

NeedWidePrototypes反过来在Xlib.h中使用,例如以下列方式

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

KeyCode是来自typedef

X.h
typedef unsigned char KeyCode;

所以我猜这里narrow,引用KeyCode所用类型的宽度。

可以在其他文件中找到相同typedef的相同构造,例如XKBlib.h

答案 1 :(得分:1)

除了在INSTALL中注明之外,它还是一个常见问题解答,几年内的热门话题Why doesn't the scrollbar work?(另见2006期间更改日志中的注释)