gpt4 book ai didi

c - 编写原型(prototype)而不是#include

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:06 24 4
gpt4 key购买 nike

例如,这是一个没有 stdio.h 的“hello, world”程序包括:

int puts(const char *str);

int main(void)
{
puts("hello, world");
}

我什至认为当我的程序变得越来越长时,这可能是一种很好的编程风格,因为所有调用的函数都明确地列在开头。

所以我的问题是:除了为标准库函数提供原型(prototype)外,#include <stdio.h> 还能做什么?做什么?

最佳答案

C11 标准草案的(非规范性)附录 J.2 列出了以下未定义行为的示例:

— A function, object, type, or macro that is specified as being declared or defined by some standard header is used before any header that declares or defines it is included (7.1.2)

但是,正如 Keith Thompson 指出的那样,7.1.4p2 说:

2 Provided that a library function can be declared without reference to any type defined in a header, it is also permissible to declare the function and use it without including its associated header.

因此使用puts不包括 <stdio.h>确实可以以符合标准的方式完成。但是,您不能声明 fputs ,因为它需要一个指向- FILE 的指针作为一个论点,你不能以严格一致的方式去做。

此外,puts也可能是存在 <stdio.h> 的宏并在标题存在的情况下更快地扩展到某些内容。

总而言之,可以在不包含头文件的情况下正确声明的函数数量并不多。至于使用 header 中某些类型的函数 - 如果您使用 language-lawyer 标签询问有关 C 的问题,答案来自标准并且标准对此直言不讳:不要做它,否则你的程序将不严格符合。

关于c - 编写原型(prototype)而不是#include <stdio.h>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com