0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言为什么不需要包含stdio.h

学益得智能硬件 来源:学益得智能硬件 2024-10-29 15:48 次阅读

我们在写单片机程序的时候,第一行都会包含 reg51.h,于是就有同学提出了疑问,为什么不需要包含 stdio.h?

如果从C语言本身来讲,一个完整的 C 代码并不需要包含头文件。

标准中也提到,程序的入口是 main 函数,它应该有个整型返回值,参数可有可无。

所以一个最简单的 C 代码应该是这样。

int main(void)
{
    return 0;
}

至于它的返回值,即使写成 void,很多编译器也不会提示问题。

那我们学习C语言的时候,为什么在第一行加上 stdio.h?

因为在代码中用到了 printf,使用函数,就得提前声明,告诉编译器它是个函数,并且函数原型是什么样。

而 printf 函数的声明,就放在了 stdio.h 里面。

如果程序里面用不到输入输出相关的函数,完全可以不包含 stdio.h。

再回到 51 单片机上。

作为一个裸机程序,很多时候,我们用不到 printf,所以也就很少包含 stdio.h。

包含 reg51.h,主要还是因为这里面定义了很多寄存器,比如点灯需要用到的 P1 等等,打开 reg51.h,你会发现,它其实就是个地址。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632696
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136120
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62411
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49043

原文标题:C语言并不是非要包含stdio.h

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    库文件stdlib.hstdio.h不支持utoa()和snprintf()

    ; gt;但是函数只是把错误抛在上面。但并非总是如此。我想我需要知道STDLIB。hSTDIOh实际上是如何加载到项目中的,以及从何处来的。什么是对标准的内置库文件进行更改,这些文
    发表于 01-11 11:21

    ucos在PC机上的应用提示无法打开stdio.h文件

    为什么我编译#includevoid main(){while(1){printf("hello world\n");}}老是提示无法打开stdio.h文件?求大神解答
    发表于 04-28 23:13

    为什么烧写stdio.h屏幕会发黑?

    烧写stdio.h屏幕发黑 什么原因?
    发表于 08-23 05:45

    在嵌入式处理器环境中为什么汇编语言不需要堆栈?

    在嵌入式处理器环境中,为何C语言(函数调用)需要堆栈,而汇编语言不需要堆栈?据我所知,c
    发表于 03-20 04:35

    嵌入式开发中C语言编程的相关资料分享

    ,使用库函数是不可避免的。关于使用库函数的最简单的例子就是printf()。在Linux环境下的C语言编程中,库函数包括两个部分:一种是C语言的标准库函数,例如
    发表于 12-15 06:13

    编译显示fatal error: stdio.h: No such file or directory怎么解决?

    在编译通过命令arm-poky-linux-gnueabi-gcc test.c,编译程序时,显示fatal error: stdio.h: No such file or directory,用gcc编译不会报错!
    发表于 01-10 06:35

    arm-poky-linux-gnueabi-gcc 编译提示找不到stdio.h怎么办?

    了一个helloworld 的程序,通过arm-poky-linux-gnueabi-gcc 编译提示找不到stdio.h,试了网上的安装lib6-dev 不行,求解决!!!!hello程序如下
    发表于 11-28 06:01

    无法从“.c”文件加载在“.h”中声明的变量和头文件请教如何解决

    文件中包含“components.h”和“stdio.h”并声明变量时没有问题。但是,当包含 core.h 和头文件中声明的变量时会发生错误
    发表于 12-02 07:56

    不需要场效应管的多路传输开关

    不需要场效应管的多路传输开关
    发表于 04-13 10:44 894次阅读
    <b class='flag-5'>不需要</b>场效应管的多路传输开关

    基于单片机设计的软件时钟C语言程序

    本内容提供了基于单片机设计的软件时钟C语言程序 程序如下: #pragma db oe #include reg52.h #include absacc.h #include stri
    发表于 11-21 15:59 198次下载

    一些常见的C语言字符串操作

      #字符串倒序输出 实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里需要注意,不需要考虑len是奇数还是偶数的问题。 如果len是奇数,最后一个字符就不需要倒序
    的头像 发表于 12-24 16:31 2052次阅读

    不需要电感器

    不需要电感器
    发表于 04-29 12:14 3次下载
    <b class='flag-5'>不需要</b>电感器

    C语言中的数组空间动态开辟

    的方法更加灵活,更能有效的根据需要开辟空间使用。 1、一维数组 一维数组最简单,直接使用 malloc 函数就可以开辟,以 int 型数据为例,开辟一个连续空间使用。 # include stdio.h
    的头像 发表于 02-10 12:42 2070次阅读

    C语言如何实现Hello xiaolin

    在上述程序里编译预处理命令称为文件包含命令,作用是在编译之前把程序需要使用的关于系统定义的函数printf()的一些信息文件stdio.h包含进来。
    的头像 发表于 03-08 16:06 339次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>如何实现Hello xiaolin

    不需要点表的工业网关”如何实现松下FPG-C32T2H数据采集和远程维护的物联网解决方案

    深控技术的 “不需要点表的工业网关” 实现松下 FPG-C32T2H 数据采集和远程维护的物联网解决方案
    的头像 发表于 10-12 11:30 261次阅读
    “<b class='flag-5'>不需要</b>点表的工业网关”如何实现松下FPG-<b class='flag-5'>C32T2H</b>数据采集和远程维护的物联网解决方案