我正在使用 Windows 10 和 MinGW GCC 编译器(不是 mingw64 编译器),但是当我尝试这段代码时, 这是我的 GCC 版本,
C:\Users\94768>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --with-gmp=/mingw --with-mpfr --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --enable-libgomp --disable-libvtv --enable-nls
Thread model: win32
gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)
代码是,
#include <stdio.h>
void main() {
float a = 1.12345;
double b = 1.12345;
long double c = 1.12345;
printf("float value is is %f\n", a);
printf("double value is %lf\n", b);
printf("long double value is %Lf\n", c);
}
我得到的输出不是我所期望的,我不明白这里的问题是什么,我是 C 编程的绝对初学者。
float value is 1.123450
double value is 1.123450
long double value is -0.000000
非常感谢您的指导!
海湾合作委员会6.3?那是古老的! 截至撰写本文时,最新的 GCC 版本是 11.1。
我建议您放弃 MinGW 并切换到 MinGW-w64,因为它更新得多(并且支持 32 位和 64 位 Windows)。
您可以从 https://winlibs.com/
获取最新的独立 MinGW-w64 版本使用该编译器构建的代码输出是:
float value is is 1.123450
double value is 1.123450
long double value is 1.123450
看起来 Windows 上的 GCC 不能与
long double
类型很好地配合,除非你使用编译器标志:
-D__USE_MINGW_ANSI_STDIO
因此,如果您的源文件是,例如,
code.c
,那么您需要运行:
gcc -D__USE_MINGW_ANSI_STDIO code.c -o code.exe
您也可以参考我在遇到同样问题时找到的信息的原始论坛帖子: c编程论坛