在 C 中删除 #include <stdio.h> 是否正确?
Is it correct to drop #include <stdio.h> in C?
如果我在 C(不是 C++)中使用 printf
、scanf
、puts
或某些其他函数并且不编写包含行,是否可以将其视为未指定或未定义的行为?
我记得,C 根本不需要 porotope 声明,但建议让它们允许编译器在调用时进行类型转换。 printf
和其他此类函数的原型仍然不需要,不确定自定义函数。
评论中的讨论有关
对于职业发展,没有。
代码高尔夫,没问题。
如果您不声明一个函数,编译器会自动生成一个,它可能与它的真实声明相匹配,也可能不匹配。如果没有,它可能会或可能不会产生段错误或软件错误。 gcc
在这种情况下也会给出警告。
从技术上讲,在许多情况下您可以跳过 #include
。但是对于某些函数,如果没有原型,编译器将无法生成正确的函数调用。例如。如果一个参数是 double
并且你把 0
- 使用原型,它将被转换并存储为堆栈中的 double
值,否则会有 int
会产生错误的计算.
否和是
stdio.h
有一个 explicit 函数声明,如果它是 C++ 编译器(例如 g++),则禁止这样的事情。
由于 c++ 需要所有函数的 explicit 声明,但是任何适当的 C compiler
都会创建这些函数的 implicit 声明,将代码编译成object文件,在和标准库链接的时候,会发现那些不小心会匹配隐式声明的函数的定义,可能gcc
会给你一个警告。
因此,如果您正在编写希望可维护和可读的软件,那不是放弃它的选择,但是对于快速原型设计或代码挑战,这可能并不那么重要。
Is it correct to drop #include in C?
不,这不正确。如果您使用像 printf
.
这样的 stdio.h
函数,请务必包含它
C 已删除隐式声明(使用 C99)并且需要包含。唯一的其他选择是为 printf
.
提供一个可见的原型声明
此外,即使 C 有隐式声明,隐式声明也不适用于变量参数函数;所以在 C89 中不添加 stdio.h
包含并且没有可见的原型(对于 printf
示例)是未定义的行为。
如果我在 C(不是 C++)中使用 printf
、scanf
、puts
或某些其他函数并且不编写包含行,是否可以将其视为未指定或未定义的行为?
我记得,C 根本不需要 porotope 声明,但建议让它们允许编译器在调用时进行类型转换。 printf
和其他此类函数的原型仍然不需要,不确定自定义函数。
对于职业发展,没有。
代码高尔夫,没问题。
如果您不声明一个函数,编译器会自动生成一个,它可能与它的真实声明相匹配,也可能不匹配。如果没有,它可能会或可能不会产生段错误或软件错误。 gcc
在这种情况下也会给出警告。
从技术上讲,在许多情况下您可以跳过 #include
。但是对于某些函数,如果没有原型,编译器将无法生成正确的函数调用。例如。如果一个参数是 double
并且你把 0
- 使用原型,它将被转换并存储为堆栈中的 double
值,否则会有 int
会产生错误的计算.
否和是
stdio.h
有一个 explicit 函数声明,如果它是 C++ 编译器(例如 g++),则禁止这样的事情。
由于 c++ 需要所有函数的 explicit 声明,但是任何适当的 C compiler
都会创建这些函数的 implicit 声明,将代码编译成object文件,在和标准库链接的时候,会发现那些不小心会匹配隐式声明的函数的定义,可能gcc
会给你一个警告。
因此,如果您正在编写希望可维护和可读的软件,那不是放弃它的选择,但是对于快速原型设计或代码挑战,这可能并不那么重要。
Is it correct to drop #include in C?
不,这不正确。如果您使用像 printf
.
stdio.h
函数,请务必包含它
C 已删除隐式声明(使用 C99)并且需要包含。唯一的其他选择是为 printf
.
此外,即使 C 有隐式声明,隐式声明也不适用于变量参数函数;所以在 C89 中不添加 stdio.h
包含并且没有可见的原型(对于 printf
示例)是未定义的行为。