我是一名正在学习C的学生 . 我已经浏览了互联网上的教程 . 所有这些都不会在一些包含文件之后使用.h扩展名,例如
#include <iostream>
但我的C讲师说我必须在iostream之后加入.h扩展名,例如:
#include <iostream.h>
我的书“由Waite Group编写的Turbo C中的面向对象编程”由Robert Lafore编写,也告诉我在iostream之后加上.h扩展名 . 我的讲师和书都说使用cout和cin函数时不需要使用以下代码 .
using namespace std;
使用cout和cin函数时,需要命名空间std,对吗?如果我尝试做书和讲师讲的话,我的编译器(g)会给我错误 . 该书还说要使用
void main()
而不是
int main()
如果我按照讲师或书中所说的那样,我在编译时会遇到错误 . 怎么了?我在Linux Mint 17上使用g进行编译 .
3 回答
这本书看起来非常过时 . 得到new one .
不要写
<iostream.h>
,<iostream>
是正确的(所有标准 Headers 都相同) .不要使用
using namespace std;
,here是为什么 . 请使用完全限定名称,例如std::cout << "Hello World\n";
.您的main应该是
int main ()
或int main (int argc, char **argv)
,具体取决于您是否要处理命令行参数 .另外,不要使用TurboC,它非常过时 .
你的讲师和他的书不正确/取决于20年前的情况 .
在1998年C标准化之前,许多编译器(或者更确切地说:他们的库实现)实际上知道了一个 Headers
<iostream.h>
,其中标准C中名称空间std
中的几个符号存在于全局名称空间中 . 哪些符号在编译器和编译器之间完全不同,就像当时的许多事情一样 . 这些 Headers 不包括在1998年的C标准中,而不是在它们之后的任何 Headers 中 . 今天,最近的编译器将完全拒绝试图使用它们的代码 .但这并不能说服你的讲师在过去的15年里他错了,所以这就是你能给他看的东西(如果你相信这样做不会让你成为生命的敌人):
This是指向C 11标准的最新公开草案的链接,这是您今天可以合理预期使用的草案 . 打开它,转到 page 429 (或搜索 [headers] ),看到
<iostream>
列出而<iostream.h>
不是 .请参阅 [contents] 中 page 428 的底部,标准库的符号位于命名空间
std
中:此外,关于
main
函数,转到 page 61 (或搜索 [basic.start.main] )以查看不允许void main
:(强调我的)
根据我的知识和我上次教授告诉我们的内容:
您可以选择是否包含
.h
..h
通常是旧版本 . 现在再次使用using命名空间是可选的 . (这并不意味着这是一种很好的做法,但作为一名学生,很多学校都允许这样做 . )有些书籍使用命名空间解释,有些则没有 .
那么使用命名空间而不使用命名空间有什么区别?
以
cout
为例 . 如果您在代码的开头使用了命名空间std . 你可以这样做:但是,如果您没有添加
using namespace std;
行 . 你必须这样写:顺便说一下,当我在大学时,我们总是在学校里使用
int main()
. 我不认为void main()
是个好主意 .