C++ 在普通英语书籍示例中未编译

C++ in Plain English Book Example not compiling

本文关键字:编译 英语 C++      更新时间:2023-10-16

我是一个新手,想学习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,这是否已经过时了?

这是一本非常糟糕的书。这是一个 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++书吗?

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

实现不应预定义主函数。此函数不得重载。它应 具有 int 类型的返回类型,但除此之外,其类型是实现定义的。所有实施应 允许以下两个 main 定义: int main() { /* ... */ }int main(int argc, char* argv[]) { /* ... */ }

不能有类型 voidmain() 函数。

将其更改为

#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";