【问题标题】:errors when switching back and forth between VisualStudio and CodeBlocks using C使用 C 在 VisualStudio 和 CodeBlocks 之间来回切换时出错
【发布时间】:2016-10-05 23:14:56
【问题描述】:

我在晚年学习编程(50 多岁)。我正在使用 Visual Studio 2015 和 Code::Blocks 16.01 版。

我有一些问题。

首先,为什么 VS 和 CB 需要“调整”才能使它们编译和运行下面包含的代码? M_PI 怎么了? (我以为它是 的一部分,但显然 VS 不认识它) 为什么我必须在 VS 中执行 #define 而不是在 CB 中? 为什么 M_PI 不显示其定义的值?

旁注:我知道 scanff 已被弃用,但如果你必须走这条路,请随意。我们必须在课堂上使用它。

这是我第一次进入代码块。 它编译并运行。 这使用 stdio.h 和 math.h

 // >>>> CODEBLOCKS VERSION <<<<
    #include <stdio.h>
    #include <math.h>

    // M_PI is 3.14159265358979323849

    int main ( void )
    {
        double myNumber = 0.0;

        printf("Enter a number.\n");
        scanf("%lf", &myNumber);

        printf("You entered: %lf.", myNumber);
        printf("This is the value of pi: %.20lf.", M_PI);

        return 0;
    }

当我将它粘贴到 Visual Studio 中并编译时,我得到一个错误。具体来说,“标识符“M_PI”未定义”。 如果我添加#define M_PI 3.14159265358979323849,错误就会消失,但我明白了 代码 C4996 -- 'scanf':此函数或变量可能不安全。考虑改用 scanf_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。详细信息请参见在线帮助。 如果我将 scanf 更改为 scanf_s 错误就会清除,代码编译并运行与代码块版本相同。 这使用 stdio.h 和 math.h 和

 // >>>> VISUAL STUDIO VERSION <<<<
    #include <stdio.h>
    #include <math.h>

    #define M_PI 3.14159265358979323849

    int main(void)
    {
        double myNumber = 0.0;

        printf("Enter a number.\n");
        scanf_s("%lf", &myNumber);

        printf("You entered: %lf.", myNumber);
        printf("This is the value of pi: %.20lf.", M_PI);

        return 0;
    }

提前致谢!

【问题讨论】:

    标签: c visual-studio codeblocks


    【解决方案1】:

    由于某些未知原因,MSVS 在包含 math.h 之前需要 #define _USE_MATH_DEFINES

    【讨论】:

    • 谢谢!那很有趣。我仍然不知道为什么会这样,但这解决了它。关于为什么 M_PI 不显示预期值的问题有任何帮助吗?
    • M_PI 不在 C 标准中,因此 MSVC 就在这里(进行更改)。但是期望值是多少,实际值是多少呢?如果您认为3.14159265358979311600 是错误的,那是……呃……错了。这是正确舍入的结果,双精度数不能容纳更多。
    猜你喜欢
    • 1970-01-01
    • 2022-08-08
    • 2016-06-07
    • 2020-01-03
    • 1970-01-01
    • 2019-10-17
    • 2020-02-15
    • 2011-11-29
    相关资源
    最近更新 更多