在Windows上使用GCC的MinGW错误报告数值

时间:2015-07-17 09:34:52

标签: c windows gcc printf mingw

出于某种原因,每当我在编译器设置中使用数值(在Windows上使用MinGW,使用CMD提示进行编译和运行)时,它就完全误报了程序中的数字。

代码示例:

//C hello world example
#include <stdio.h>

int main()
{

    int value;
    value = 10;
    printf("The number is %d \n"), value;


     int value2;
     value2 = -100;
     printf("The number is %d \n"), value2;
     return 0;
}

比照。 screenshot of output

2 个答案:

答案 0 :(得分:6)

valuevalue2必须作为参数传递,即中的 。将其更改为以下内容:

printf("The number is %d \n", value);

value2类似。

再一次,这表明使用-Wall-pedantic开启进行编译很有用。海湾合作委员会很可能会发出警告信息。

答案 1 :(得分:3)

printf("The number is %d \n"), value;

您以某种方式(错误地)使用"comma operator",因此不会产生语法错误。您的打印声明被视为

printf("The number is %d \n");

value si作为void表达式执行。

现在,printf()variadic function,它不会检查所提供的格式说明符所需的参数数量(默认情况下),但是,请注意,根据{的所需格式{1}},您基本上错过了printf()格式说明符的操作数。这反过来调用undefined behaviour

作为标准要求

  

如果格式的参数不足,则行为为   未定义。

正确的语法是

%d

其中 printf("The number is %d \n", value); 将是value格式说明符的参数。

故事的道德:启用编译器警告并注意它们。

注意:一些建议,

  1. %d的推荐签名为main(),或至少 int main(int argc, char**argv)
  2. 尝试养成同时定义和初始化任何变量的习惯。这样可以避免在以后使用未初始化值(局部变量)的危险。