博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于不同的编译器使用过程中遇到的问题!
阅读量:4119 次
发布时间:2019-05-25

本文共 1252 字,大约阅读时间需要 4 分钟。

1.long double支持的问题

 

测试程序:

 

 (1)Tiny C

              编译0警告,0错误

              执行,scanf无法接受数据

(2)MinGW

              编译警告,不认识“L”格式字符

              执行,scanf无法接受数据

(3)微软VC2005-2010

            编译警告scanf过时,推荐用scanf_s代替 0错误

           忽略警告,执行成功,一切正常。

           发现微软VC中double 和long double都是8个字节,也就是说微软实际上是伪支持long double,而TCC和MinGW中都是12个字节的long double。

           难怪不出问题

 

1,2的失败的原因是因为调用的是微软的C运行时库,而微软本来就不是真正的支持long double.不过连L这个格式字符串都识别不了,说明MinGW还是做的不够好。这是标准C的应该支持的东西。MinGW对C++编译的时候调用的是GCC的库,因此采用C++文件,cin和cout是可以输入输出真正的long double的。

  (4) borland c++ 5.5.1

  这个方面表现最好的是bc++.

  编译0警告,0错误

  执行,全部正确

  Bc真正支持long double,和Gcc不一样,bc的long double  是10个字节,非常符合IEEE标准。

(5)Digital Mars C/C++ Compilers

   这个编译器非常不错,表现和borland C++编译器一样。

   编译0警告,0错误

   执行,全部正确,真正支持long double,长度也是10。

  但是编译出来的执行文件比b还要小。

(6)openwatcom c++ 1.9

 这个编译器表现和VC非常相似。

  编译0警告,0错误

  执行,全部正确。

  只是他的long double是8个字节的,和微软一样,其实就是double,是假支持。

编译出来的文件比较小,和DM相当。

这个编译器的附件工具做的很好,特别是那个图形化的调试器,还不错。

 

 

 

2。局部变量定义的问题

 

  在VC中如果建立C语言程序,局部变量的定义必须放在开始,不能插在两个执行语句之间,否则编译通不过!

 但是在VC中,如果建立的是C++文件,则没有这个问题。

borlandC++的表现一样,对C语言不允许在语句之间定义局部变量。

 

但是在CB中,采用DM编译器,TinyC编译器,MINGW编译器,确都没有这个问题,要知道TCC是纯C编译器。

采用MinGW测试,也没有这个问题。这是否说明DM,TCC和MinGW在C支持方面比微软更加灵活?呵呵。

 

 

 

 

转载地址:http://uccpi.baihongyu.com/

你可能感兴趣的文章
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
【设计模式】—-(2)工厂方法模式(创建型)
查看>>
有return的情况下try catch finally的执行顺序(最有说服力的总结)
查看>>
String s1 = new String("abc"); String s2 = ("abc");
查看>>
JAVA数据类型
查看>>
Xshell 4 入门
查看>>
SoapUI-入门
查看>>
Oracle -常用命令
查看>>