人造人 发表于 2021-8-27 14:25:21

逃兵 发表于 2021-8-27 14:22


你的 gcc 不提示,我这边的 gcc 提示说 lf 不对,应该是 Lf
main.c: In function ‘main’:
main.c:10:20: warning: format ‘%lf’ expects argument of type ‘double’, but argument 2 has type ‘long double’ [-Wformat=]
   10 |   printf("c=%6.2lf,s=%6.2lf",c,s);
      |               ~~~~~^         ~
      |                  |         |
      |                  double      long double
      |               %6.2Lf
main.c:10:29: warning: format ‘%lf’ expects argument of type ‘double’, but argument 3 has type ‘long double’ [-Wformat=]
   10 |   printf("c=%6.2lf,s=%6.2lf",c,s);
      |                        ~~~~~^    ~
      |                           |    |
      |                           |    long double
      |                           double
      |                        %6.2Lf

逃兵 发表于 2021-8-27 14:25:33

人造人 发表于 2021-8-27 14:03
把 Lf 改成 f 然后
gcc -g -Wall -o main main.c

找到了一个帖子。。但是具体原因我不知道

https://blog.csdn.net/Hippocrates/article/details/104251373

人造人 发表于 2021-8-27 14:26:54

逃兵 发表于 2021-8-27 14:22


试试这个
gcc -g -Wall -Wextra -o main main.c

逃兵 发表于 2021-8-27 14:29:13

人造人 发表于 2021-8-27 14:26
试试这个

也是这个
demo.c:10:12: warning: unknown conversion type character 'L' in format [-Wformat=]
demo.c:10:12: warning: too many arguments for format [-Wformat-extra-args]
demo.c:10:12: warning: unknown conversion type character 'L' in format [-Wformat=]
demo.c:10:12: warning: unknown conversion type character 'L' in format [-Wformat=]
demo.c:10:12: warning: too many arguments for format [-Wformat-extra-args]


我看到那个帖子说

问题产生原因:
VS Code默认使用了系统crt的printf函数。

这一方面我不太了解,需要再查查资料

人造人 发表于 2021-8-27 14:30:12

逃兵 发表于 2021-8-27 14:25
找到了一个帖子。。但是具体原因我不知道

https://blog.csdn.net/Hippocrates/article/details/104251 ...

还真是编译器的 bug

在Dev-C++相关头文件中定义long double是12字节,但是Dev-C++的printf却认为long double是8字节,所导致无法正常输出long double类型,这算是Dev-C++的一个BUG。可以尝试换成cout来进行输出。

https://www.zhihu.com/question/64387466/answer/243989049

人造人 发表于 2021-8-27 14:31:19

逃兵 发表于 2021-8-27 14:29
也是这个




把 Lf 改成 f 然后
gcc -g -Wall -Wextra -o main main.c

逃兵 发表于 2021-8-27 14:39:48

人造人 发表于 2021-8-27 14:31
把 Lf 改成 f 然后
gcc -g -Wall -Wextra -o main main.c

demo.c: In function 'main':
demo.c:11:12: warning: format '%f' expects argument of type 'double', but argument 2 has type 'long double' [-Wformat=]
   printf("c=%6.2f,s=%6.2f\n",c,s);
            ^
demo.c:11:12: warning: format '%f' expects argument of type 'double', but argument 3 has type 'long double' [-Wformat=]

逃兵 发表于 2021-8-27 14:40:19

人造人 发表于 2021-8-27 14:30
还真是编译器的 bug

在Dev-C++相关头文件中定义long double是12字节,但是Dev-C++的printf却认为long...

谢谢大佬!

人造人 发表于 2021-8-27 14:52:40

逃兵 发表于 2021-8-27 14:39


没办法了,就是不显示
可能是你的 gcc 太老了,我的 gcc (GCC) 10.2.0
$ PS1='$ '
$ gcc --version
gcc (GCC) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$
页: 1 [2]
查看完整版本: double,longdouble除了范围的区别