C++ 在普通英语书籍示例中未编译
C++ in Plain English Book Example not compiling
我是一个新手,想学习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[]) { /* ... */ }
不能有类型 void
的 main()
函数。
将其更改为
#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 表示程序执行成功,任何其他数字都是错误代码。
您可以选择将 argc
和 argv
参数添加到 main 函数中,这些参数用于获取从命令行传递给程序的值。 例如,如果您的程序称为"myprogram",那么如果您使用以下命令从命令行执行它:
./myprogram -test
那么 argc
(数组 argv 的长度)将为 2,而 argv 将是具有以下值的数组:
argv[0] = "./myprogram";
argv[1] = "-test";