在windows环境下,有时候我们使用c99标准命令进行gcc编译,但会发现,结果和我们预想的不同。这是一种语义错误。
如以下的代码:
#include <stdio.h> int main(void) { float aboat=32000.0; double abet=2.14e9; long double dip=5.32e-5; printf("%f can be written %e\n",aboat,aboat); printf("And it's %a in hexadecimal,powers of 2 notation\n",aboat); printf("%f can be written %e\n",abet,abet); printf("%Lf can be written %Le\n",dip,dip); return 0; }
我们使用c99标准命令在 powershell 下进行gcc编译。
PS D:\c\test1> gcc -std=c99 test1.c PS D:\c\test1> .\a 32000.000000 can be written 3.200000e+004 And it's 0x1.f40000p+14 in hexadecimal,powers of 2 notation 2140000000.000000 can be written 2.140000e+009 0.000000 can be written 3.172882e-317
所得到的结果并不是以c99标准输出。解决此类问题有两种方法。
第一种方法是使用以下标准命令在gcc下重新编译c文件:
gcc -D__USE_MINGW_ANSI_STDIO test1.c
第二种方法是重新修改代码,在代码的顶端定义宏:
#define __USE_MINGW_ANSI_STDIO 1 //1表示启用 #include <stdio.h> int main(void) { float aboat=32000.0; double abet=2.14e9; long double dip=5.32e-5; printf("%f can be written %e\n",aboat,aboat); printf("And it's %a in hexadecimal,powers of 2 notation\n",aboat); printf("%f can be written %e\n",abet,abet); printf("%Lf can be written %Le\n",dip,dip); return 0; }
这里需要注意的是:
#define __USE_MINGW_ANSI_STDIO 1
这个宏定义必须放在第一行,否则用gcc编译后,结果将无法以c99标准进行printf()输出。
gcc编译。
PS D:\c\test1> gcc test1.c PS D:\c\test1> .\a 32000.000000 can be written 3.200000e+04 And it's 0xf.ap+11 in hexadecimal,powers of 2 notation 2140000000.000000 can be written 2.140000e+09 0.000053 can be written 5.320000e-05
输出的结果就以c99标准正常输出了。
完毕!
标签:Lf,test1,gcc,Le,c99,written,printf,aboat From: https://www.cnblogs.com/fjuyingwei/p/16638387.html