0

我是一个寻求学习 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,这只是过时了吗?

4

3 回答 3

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已从更改voidint
  • main接受两个参数:命令行参数的数量,以及它们的 c-string 值
  • main现在返回退出代码

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

于 2012-07-06T03:43:50.310 回答
3

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

实现不应预定义主要功能。该功能不得重载。它应该有一个 int 类型的返回类型,否则它的类型是实现定义的。所有实现都应允许以下两种 main 定义: int main() { /* ... */ }int main(int argc, char* argv[]) { /* ... */ }

于 2012-07-06T03:48:43.360 回答
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";
于 2012-07-06T03:43:49.587 回答