我是一个想要学习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,这只是过时了吗?
答案 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表示程序成功执行,任何其他数字都是错误代码。
您可以选择将argc
和argv
参数添加到main函数中,这些参数用于从命令行获取传递给程序的值。例如,如果您的程序被称为“myprogram”,那么如果您使用以下命令从命令行执行它:
./myprogram -test
然后argc
,即数组argv的长度,为2,argv将是一个具有以下值的数组:
argv[0] = "./myprogram";
argv[1] = "-test";