C ++ in Plain English Book示例不编译

时间:2012-07-06 03:41:23

标签: c++ ide

我是一个想要学习C ++的新手。我有一本书,提供了很多例子和概念。本书的第一个例子之一不使用Quincy 2005进行编译。这是代码还是IDE的错误?

示例如下:

#include <stdio.h>

void main (){



int date = 10, d2=15;
float temp = 45.0, t2=33.5;


printf("On Dec. %d, temperature was %f.\n", date, temp);
printf("On Jan. %d, temperature was %f.\n", d2, t2);


}

不幸的是,IDE声明:: main必须返回一个整数。有什么想法吗?

该示例看起来更像C,这只是过时了吗?

3 个答案:

答案 0 :(得分:5)

这是一本你正在使用的非常糟糕的书。这是一个C示例(不是那里的单个C ++特性),并且不会在现代C ++编译器上编译,从而强制执行正确的编码实践。

正确的代码如下所示:

#include <stdio.h>

int main (int argc, char **argv)
{
    int date = 10, d2=15;
    float temp = 45.0, t2=33.5;


    printf("On Dec. %d, temperature was %f.\n", date, temp);
    printf("On Jan. %d, temperature was %f.\n", d2, t2);

    return 0;
}

注意:

  • main的返回类型已从void更改为int
  • main有两个参数:命令行参数的数量及其c字符串值
  • main现在返回退出代码

你确定它是一本C ++书吗?

答案 1 :(得分:3)

C ++标准只有两种方式指定为声明main的最便携方式。所有其他都是实现定义的。以下内容来自最新草案,第3.6.1p2节:

  

实现不应预定义主函数。此功能不应过载。它应该   返回类型为int类型,但其类型是实现定义的。所有实施都应该   允许以下两个主要定义:   int main() { /* ... */ }   和   int main(int argc, char* argv[]) { /* ... */ }

答案 2 :(得分:1)

您不能拥有main()类型的void功能。

将其更改为

#include <stdio.h>

int main ()
{
    int date = 10, d2=15;
    float temp = 45.0, t2=33.5;


    printf("On Dec. %d, temperature was %f.\n", date, temp);
    printf("On Jan. %d, temperature was %f.\n", d2, t2);

    return 0; /* The compiler will assume this for main() if you don't specify it */
}

它会正常工作。它不允许void用于main函数的原因是因为main函数需要将成功或失败返回给操作系统。惯例是返回0表示程序成功执行,任何其他数字都是错误代码。

您可以选择将argcargv参数添加到main函数中,这些参数用于从命令行获取传递给程序的值。例如,如果您的程序被称为“myprogram”,那么如果您使用以下命令从命令行执行它:

./myprogram -test

然后argc,即数组argv的长度,为2,argv将是一个具有以下值的数组:

argv[0] = "./myprogram";
argv[1] = "-test";