在C编程中是否包括ncurses.h也包括stdio.h?

问题描述 投票:0回答:3

我正在研究ncurses.h,因为我试图学习c的一些设计方面,偶然发现一条声明stdio.h在ncurses内的声明

  #include <ncurses.h>        /*ncurses.h includes stdio.h*/

这是真的吗?如果是这样,有人可以向我解释原因,如果这意味着我不必再包含它了?

此外,这是否会引起任何问题,因为我没有从常规意义上准确定义它

c libraries ncurses stdio
3个回答
4
投票

[ true(例如,对于我系统上的ncurses.h版本,它是true)。但是除非有记录,否则依赖它是不明智的。即使是,我也不会。

如果使用的是<stdio.h>中声明的内容,则应在自己的源文件中包含#include <stdio.h>。它可能是多余的,但无害。保证多次包含<stdio.h>不会产生任何其他影响。


1
投票
通常,即使一个标头在其实现中包括另一个标头,您也应始终信任C标准和所使用的任何API的文档。如果它说某个头文件是包含某个项目的文件,或者说要访问某个项目,请包括该头文件,您应该遵循该文件头。

    如果包含保护(例如#pragma once#ifndef _HEADER_NAME ... #endif),多次包含同一文件无害;
  1. 如果省略包含C标准(或API文档)所说的是某个声明或定义要包含的正确文件的包含,从技术上讲,您将依赖于实现细节。这意味着您的编译器或库的下一个版本可以很好地删除该方便的嵌套包含,从而使您的程序缩短几行。

0
投票
确实包含stdio.h,是的,这确实意味着您无需再次包含stdio.h。这是可行的,因为编译器会在代码中放置#include指令的位置插入#include头文件的内容。这意味着ncurses.h不仅包含在您指定位置的代码中,而且stdio.h在放置到您的代码中之前已经包含在该文件中的适当位置。

stdio.h的后续包含将由于使用include guards而对您的程序没有影响。

如果您在自己的代码中使用stdio.h中的任何内容,我认为将#include <stdio.h>指令添加到您自己的源文件中是一种好习惯。我的理由是,它直接与下一个阅读您的代码的开发人员进行通信,该代码无需使用隐式信息即可在此处使用stdio功能。

© www.soinside.com 2019 - 2024. All rights reserved.