【问题标题】:What is a narrow prototype and why would I need one?什么是窄原型,我为什么需要一个?
【发布时间】:2015-01-25 14:41:13
【问题描述】:

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

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

(在Cygwin下需要这个选项的否定才能使滚动条和--disable-imake一起工作。)

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

【问题讨论】:

  • 通过 xterm 的源代码和 Makefile 搜索发现了什么?
  • 你读过xterm的源代码中的INSTALL文件吗?
  • @alk 很多 autoconf/configure/imake 之谜。它设置 xterm 未使用的 -DNARROWPROTO 宏。所以它一定是 X 的东西。
  • 只是猜测:“norrow”可能指的是“norrowing”原型的数量,而不是原型他们自己。
  • 另一个可能更现实的猜测是 narrow/wide 指的是某些类型 X 的大小。

标签: c function-prototypes


【解决方案1】:

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 是来自X.htypedef

typedef unsigned char KeyCode;

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

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

【讨论】:

  • 谢谢!所以 narrow prototype 不是一般的 C 语言术语,而是指某些类型的 X11 特定宽度,例如 KeyCode
【解决方案2】:

除了在 INSTALL 中注明外,这也是一个常见问题解答,几年来一直是主题Why doesn't the scrollbar work?(另请参阅2006 期间更改日志中的注释)

【讨论】:

  • Thomas,我知道你是 xterm 的维护者。如果这是(曾经)一个常见问题解答,那么在 Cygwin 上,默认配置选项使用窄原型。在 Cygwin 上运行时,是否可以更改配置脚本以使用正确的(工作)选项?查看 xterm-314 的配置脚本,第 14682 行,它为 *cygwin* 显式设置 cf_default_narrowproto=yes,当它应该为 no 时,开箱即用。
  • 我想是这样 - 我已经根据 imake 配置设置了默认值 - 请注意,宏的修订日期是 2006 年。自 2006 年以来,可能有人更改了 cygwin 的默认配置- x
猜你喜欢
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2010-12-08
  • 2018-02-03
  • 2011-04-14
  • 2018-03-16
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多