【问题标题】:Difference between the headers ncurses.h and curses.h标头 ncurses.h 和 curses.h 之间的区别
【发布时间】:2020-01-01 19:29:42
【问题描述】:

作为 curses 库的变体,标头 <ncurses.h><curses.h> 之间有什么区别?


为什么我更喜欢

#include <ncurses.h>

代替

#include <curses.h>?


我已经搜索了我的 Linux 发行版的不同之处。在我的实现(Linux Ubuntu Pengolin)中,<ncurses.h><curses.h> 头文件的别名文件。所以没有区别。

但为什么不是用两个名字分开呢?


不幸的是,这个问题What's the difference between -lcurses and -lncurses when compiling C using ncurses lib? 的答案并没有解决我的顾虑,因为他们更专注于在调用编译器时添加相应的标志,并且没有解释一般的差异。

【问题讨论】:

  • curses.h 更便携。 ncurses.h 并非在所有系统上都可用。
  • Curses 是 SystemV 中原始库的名称。 NCurses 是该库的开源实现,具有相同的 API。每个实现都会提供它们特定的头文件,例如 ncurses.h、pcurses.h,并且它们会提供一个指向其特定头文件的 curses.h 的符号链接,这样您就不必关心您拥有哪个实现。
  • 如果您想要专门实现curses库的NCurses,并且您确信该实现将在目标计算机上可用,您可以使用ncurses.h。如果你只是想要一些 curses API 的实现,请使用 curses.h,它可能由 NCurses 或其他库的实现实现,也可能不实现。

标签: c++ c ncurses difference curses


【解决方案1】:

X/Open Curses 的所有实现都提供了一个“curses.h”。 ncurses 通过指向它自己的实现“ncurses.h”的符号链接提供了这一点,如果安装了另一个实现,例如在 Solaris 上,则可以选择该头文件。

如果您正在配置 ncurses(以构建它),INSTALL 文件会在配置选项之一的上下文中对其进行解释:

--禁用覆盖 如果您在包含另一个系统的系统上安装 ncurses curses 的开发版本,或者可能被加载程序混淆 对于另一个版本,我们建议您省略指向 -诅咒。 ncurses 库始终以 -lncurses 的形式提供。 禁用覆盖还会导致 ncurses 头文件 安装到子目录中,例如 /usr/local/include/ncurses, 而不是包含目录。这样更容易避免 与 curses.h 的其他版本的编译时冲突 将头文件放入子目录假定应用程序 将遵循包含标题的(标准)实践 引用子目录名称。例如,正常的 ncurses 标头将包含使用 #include #include 虽然可以通过这种方式找到 ncursesw 标头: #include #include 在任何一种情况下(有或没有 --disable-overwrite 选项), 几乎所有的应用程序都被设计成包含一组相关的 诅咒来自同一目录的头文件。 操作 --includedir 配置选项来放置头文件 直接在正常包含目录失败的子目录中 这并破坏了可移植应用程序的构建。同样,把 /usr/include 中的一些头文件,子目录中的其他头文件很好 打破构建的方法。 配置 --disable-overwrite 时,安装的头文件' 嵌入的#include 被调整为使用相同样式的包含 如上所述。特别是, unctrl.h 标头包含在 curses.h,这意味着一个 makefile 告诉编译器 直接从子目录中包含将无法正确编译。 如果没有一些特别的努力,它要么根本无法编译, 或者编译器可能会找到不同的 unctrl.h 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2010-10-17
    • 1970-01-01
    • 2018-10-23
    • 2018-05-15
    • 2017-01-22
    • 2017-11-22
    相关资源
    最近更新 更多