为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不要求#include <stdio.h>来使用printf()?

为什么不要求#include <stdio.h>来使用printf()?

C
偶然的你 2019-11-30 13:59:27
会议记录:>type lookma.cint main() {  printf("%s", "no stdio.h");}>cl lookma.cMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86Copyright (C) Microsoft Corporation.  All rights reserved.lookma.cMicrosoft (R) Incremental Linker Version 8.00.50727.762Copyright (C) Microsoft Corporation.  All rights reserved./out:lookma.exelookma.obj>lookmano stdio.h
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您最初标记了此C ++,但它似乎是一个C程序。如果范围内没有原型(例如由于省略了#include <stdio.h>),C将自动为函数提供隐式声明。隐式声明为:


int printf();

这意味着printf是一个返回int且可以接受任意数量参数的函数。这个原型恰好可以为您服务。您应该#include <stdio.h>


最后,我要补充的是,当前的C标准(ISO / IEC 9899:1999或俗称“C99”)都不会允许隐式声明,并将该软件将不符合。隐式声明已删除。我相信您的编译器不支持C99。C ++还需要正确的原型,并且不执行隐式声明。


查看完整回答
反对 回复 2019-11-30
?
HUWWW

TA贡献1874条经验 获得超12个赞

printf() 位于标准C库中,并且链接程序始终将标准库链接到您的可执行文件,因此将找到任何标准函数,并且不会出现链接问题。

未能包含适当的头会导致使用未原型化的函数,这可能会导致问题,因为C编译器假定该函数没有原型返回,int并且采用了可变数量的参数。因此,请始终包含标头-这是您的安全栅栏。


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 838 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信