Basile Stary..

7

你有一些未定义的行为(所以可能发生任意不好的事情,你不应该期待任何好事).随着对的printf函数期望(注意,当作为参数传递一个被晋升为一个),但是是文字型的.此外,不同的编译器(甚至同一编译器的不同版本)或不同的优化标志可能会产生不同的不良影响.%fdoublefloatdouble0int

(对未定义行为的良好态度是努力总是避免它;不要浪费时间去试图理解具体发生的事情;但是将UB视为非常肮脏或" 生病 "的东西,你总是避免)

要解释观察到的行为,您需要深入了解特定实现的细节,特别是ABI和调用约定(对于可变函数àla printf).另外,查看生成的汇编代码(使用GCC,编译gcc -fverbose-asm -S -O1); 有可能在一个不同于一个参数的寄存器(或一些调用堆栈槽)中传递一个double参数int(因此该printf函数正在使垃圾发生在该位置或寄存器中); 另请注意,通常sizeof(int)可能是4但sizeof(double)可能是8(因此数据量甚至不对).

为了避免这种错误,需要有良好的编译器(如编译的习惯GCC或锵/ LLVM在免费软件领域),并启用所有警告和调试信息(例如,编译使用gcc -Wall -Wextra -g与GCC).编译器会警告你.

BTW,void main()是非法的.它至少应该是int main(void)优选的int main(int argc, char**argv),你应该注意这些论点.

在您的示例中,gcc -Wall -Wextra(使用GCC 7)告诉(对于您的源文件april.c):

april.c:4:10: warning: return type of ‘main’ is not ‘int’ [-Wmain]

void main() {

^~~~

april.c: In function ‘main’:

april.c:5:14: warning: format ‘%d’ expects argument of type ‘int’,

but argument 2 has type ‘double’ [-Wformat=]

printf("%d\n", 1.5);

~^

%f

april.c:6:14: warning: format ‘%f’ expects argument of type ‘double’,

but argument 2 has type ‘int’ [-Wformat=]

printf("%f", 0);

~^

%d

注:开发-C++和代码块都没有编译器,但IDE秒.它们都运行一些外部 编译器(可能是GCC作为系统上的MinGW).

@AprilJohnson:单词**undefined**是故意选择的.没有"可预期的"结果.不同的编译器/(版本/选项,不同的时间,不同的气候,不同的环境等)会产生不同的结果,包括格式化硬盘或鼻守护进程. (3认同)

C语言中连续两个printf,在C中两个连续的printf()调用的奇怪行为相关推荐

  1. C语言中临时变量写在哪里,C语言中不允许创建临时变量,交换两个数的内容

    在C语言中可以通过建立临时变量来实现两个变量的交换,当不允许建立临时变量时,应该怎样实现两变量的交换呢? 假设有两个变量num1和num2:下面通过两种方法进行分析. 方法一:利用加减法.具体算法分析 ...

  2. 在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积;再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积。

    在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积:再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积. 1.mult. ...

  3. 【c语言】printf和scanf中* # %g的作用

    写这一片博客是因为在写题的时候遇到了一些相关的麻烦 一.printf和scanf中* 的作用 scanf *在scanf中起到过滤的作用,就比如写入了三个数,而就只想要中间的数,那我们就可以应用 * ...

  4. R语言ggplot2可视化、在一张图中画出两条曲线(two lines in same ggplot2 graph)、使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中

    R语言ggplot2可视化.在一张图中画出两条曲线(two lines in same ggplot2 graph).使用pdf函数将ggplot2可视化图像保存到指定目录的pdf格式文件中 目录

  5. c语言 输入n*n矩阵,C语言函数 编程输入一个n*n矩阵中各元素的值,找出两条对角线上的元素之和...

    题目: C语言函数 编程输入一个n*n矩阵中各元素的值,找出两条对角线上的元素之和 用函数怎么写 解答: #include #define N 5 void main() { \x09int matr ...

  6. c语言两个线性表la lb,有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合...

    <有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合>由会员分享,可在线阅读,更多相关<有两个集合用两个线性表LA和LB表示即线性表中的数据元 ...

  7. C语言学习之编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符

    编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符.思考以下问题: (1)变量cl和c2应定义为字符型,整型还是二者皆可? (2)要求输 ...

  8. c语言case后接printf,C编程中switch。case 问题

    int main() { int imonth; printf("请输入月份:\n"); scanf_s("%d",&imonth,2); switch ...

  9. 在PTA中c语言中求连续因子,团体程序设计天梯赛-练习集L1-006. *连续因子

    一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就是3个连续的数字.给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入 ...

  10. Android开发,使用Log打印日志,打印相同内容在Logcat中只能连续显示两次(遍历打印List中的内容,打印结果条数比List的size小)。

    这个问题也不算什么有技术含量的问题,不过我感觉还是有必要写篇博客记录,以免有人遇到和我一样的困扰,也是因为在网上搜索发现,没有多少文章说明这个如题的原因,可能是大多都没经历过这个问题,或者是感觉不值得 ...

最新文章

  1. Python开发基础总结之函数+闭包+字典+列表
  2. 西湖首届本科生开招!每名学生配三位学术导师,大二全员海外交流
  3. opencv 图像雾检测_OpenCV图像处理-基于OpenPose的关键点检测
  4. 018_html文件路径
  5. ESP8266-SDK编写的TM1668程序驱动数码管
  6. script标签属性用type还是language?
  7. u盘病毒之tel.xls.exe
  8. 如何在xshell中创建一个SSH隧道
  9. 1215 数组的宽度
  10. java负零_java数据结构从零基础到负基础
  11. 解决DEFINE_string(result_path, result, Path for results) NameError:name 'os' is not defined
  12. [人工智能-深度学习-50]:循环神经网络 - 主要的应用场景
  13. 08cms房产门户系统源码V8.6.1多城市版
  14. 测试网站速度简单方法
  15. vant-ui的官方入口
  16. CAS解决单点登录SSO
  17. 笔记本电脑移动到行尾 行首 快捷键
  18. 苹果三代耳机_链接2020.6.13其他团无线蓝牙耳机
  19. 以太网工业RFID读写器|读卡器CK-FR12-E01接线说明与PLC组网方案
  20. Arch安装Armitage

热门文章

  1. mysql数据库更新语句效率_MySQL数据库优化
  2. 【tool】将虚拟机从 VMware workstation 转到 vsphere
  3. php7.0开发手册手机版_PHP7.0版本备注
  4. 下载旧版本jdk和tomcat
  5. 百度地图加载空白颜色_详细解析百度收录和百度排名关系
  6. mysql多实例分配空间_mysql多实例的配置
  7. melogin.cn主页登录_melogin.cn登录官网
  8. BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)
  9. python/匿名函数和内置函数
  10. C# 使用Bitmap类进行图片裁剪