为什么 Long double 数据类型在我的 C 代码中工作得很奇怪?

问题描述 投票:0回答:2

我正在使用 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 

非常感谢您的指导!

c gcc mingw
2个回答
1
投票

海湾合作委员会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

0
投票

看起来 Windows 上的 GCC 不能与

long double
类型很好地配合,除非你使用编译器标志:

-D__USE_MINGW_ANSI_STDIO

因此,如果您的源文件是,例如,

code.c
,那么您需要运行:

gcc -D__USE_MINGW_ANSI_STDIO code.c -o code.exe

您也可以参考我在遇到同样问题时找到的信息的原始论坛帖子: c编程论坛

© www.soinside.com 2019 - 2024. All rights reserved.