c语言本身不提供输入输出语句,输入输出的操作都是通过函数来实现的。c语言的标准函数库提供了一些输入输出函数,比如printf函数,scanf函数。但是printf和scanf函数不是c语言的关键字,而是函数的名字,不要误认为"输入输出语句由c语言提供。
把句子翻译成二进制指令是在编译阶段完成的,没有输入或输出句子,可以避免在编译阶段处理硬件相关的问题。
这样,编译系统可以简化,具有通用性,适用于各种计算机。扩展数据1、在输入流中,数据项必须用空格、制表符和换行符分隔。
逗号和分号不是分隔符,例如下面的代码:
scanf(#34%d%d#34,ampr,ampc)会接受10^20的输入,但是遇到1020就会失败。()函数是一个打印格式函数,一般用于将信息以指定的格式输出到标准输出设备。写程序的时候经常用到这个函数。函数的原型是:intprintf(constchar*format,...)函数的返回值是整数。如果成功,则返回输出的字符数,如果输出不正确,则返回负值。
谢谢邀请我。
在c语言程序的开发中,程序员经常把一个复杂的任务分成几个简单的子模块,这些子模块可以看作是复杂任务的各个组成部分。所以程序员可以像"积木"来解决复杂的任务。
这样做的原因是,如果您直接编写c语言代码来一次性解决复杂的任务,往往会使整个代码"皱巴巴的",不仅开发时容易引入bug,后期维护起来也更痛苦。试想一下,如果把任务分成几个子模块,以后发现问题可能只需要修改一个子模块。但是如果你不这样做。;不要这样做,你必须从所有的代码开始寻找并解决问题。哪种开发风格便于维护,相信题主自然明白。
任务被分成子模块后,每个子模块往往被封装成一个c语言函数,所以最后的"堆积木材和木材;"实际上是调用每个c语言函数。但每个子模块都可能得到正常结果或异常结果,通常用c语言函数的返回值来区分。当调用"堆积木材和木材;"阶段,要根据被调用函数的返回值做不同的处理。
例如,当一个子模块负责计算用户输入的数字的log(对数)值时,如果用户输入一个正数,该子模块可以得到一个正常的结果。但如果用户输入的是负数,子模块显然无法得到正常的结果。
这里这是一个例子。示例c语言代码尽可能简单,以便集中讨论主题:
cond()函数产生一个从0到10的随机数。如果随机数小于5,则返回-1(模拟异常结果),否则返回0(模拟正常结果)。fun1()函数和fun2()函数都会根据cond()函数的返回值做一些进一步的工作(上面的c语言代码跳过"进一步的工作和).在main()函数中,当"堆积木材和木材;"调用fun1()和fun2()函数,它用一个if语句判断它们的返回值,并根据返回值做出不同的处理。
现在编译这个c语言程序并执行它,得到如下结果:
从输出结果中,我们可以发现c语言程序输出"cond是假的(模拟异常)。我们经常不t不想让程序输出异常结果,所以在看到异常结果后,我们需要知道为什么会出现这个结果。
适当的输出信息有助于定位异常和检查c语言的源代码。发现程序输出的异常结果是由于if(!fun1()ampamp!fun2())为假,但无论fun1()还是fun2()返回-1,if条件表达式都会为假。在这种情况下,main()函数调用fun1()和fun2()函数是不合适的,因为我们可以这里不继续跟踪异常的原因。似乎main()函数更合适。相关的c语言代码如下。请看:
编译并执行修改后的c语言代码,得到如下结果:
这一次,我们知道哪个函数导致了异常输出,但是它写这么多行代码太麻烦了,只调用两个函数可能都用不到。如果其他地方需要类似的,it这就更麻烦了。有没有更方便的方法?我们尝试将错误消息插入fun1()和fun2()函数,并将fun1()和fun2()函数的代码修改如下:
现在在修改前使用main()函数如下:
编译执行这段c语言代码并执行,得到如下输出:
这样,我们不仅可以从输出中推断出是哪个函数导致了异常,还可以保持c语言代码尽可能的简单。但是代码还是有点罗嗦:
这两个句子的输出只有fun1和fun2不一样,但是我们需要把几乎同一个句子完整的写两遍,万一以后需要修改,两个地方都要修改,比较麻烦,容易出错。这种情况可以避免吗?
使用__function__、__line__、__file__等关键字在c语言程序的编译阶段,编译器会__function__。关键字__line__和__file__被解释为"函数名和,"行号"和"文件名"。所以有了这些关键词,我们就不不需要手动输入函数名。对于本节中提到的例子,我们可以完全使用上一节中介绍的define宏定义:
编译并执行这段c语言代码,得到如下结果:
可以看到,程序不仅输出了异常的函数名,还输出了函数所在的文件名(t.c)和行号(lin:26,lin:41)。这些调试信息看起来很舒服,在大型项目开发中非常实用。
类似的调试宏包括时间,日期等等,所以我赢了不要一一演示。
小结本节讨论在c语言程序的开发中,复杂的任务往往被分成多个子模块,打包成函数,这些子模块可能有正常的处理结果,也可能有异常的处理结果。所以本节讨论了输出基本调试信息对于定位问题的重要性,最后介绍了c语言程序开发中常用的几个调试宏,在大型项目开发中非常实用。
欢迎在评论区一起讨论提问。这些文章都是手工原创的。每天都有最简单的c语言、linux等嵌入式开发介绍。如果你喜欢我的文章,请关注一波。你可以看到最新的更新和以前的文章。