使用 .h 扩展名
Using the .h extension
我是一名正在学习C++的学生。我已经浏览了互联网上的教程。它们在某些包含文件后都不使用.h扩展名,例如
#include <iostream>
但是我的C++讲师说我必须在iostream之后包含一个.h扩展名,例如:
#include <iostream.h>
我的书 "The Waite Group's Object Oriented Programming In Turbo C++" 由 Robert Lafore 撰写,也告诉我在 iostream 之后放置一个 .h 扩展名。我的讲师和书上都说在使用 cout 和 cin 函数时不需要有下面这行代码。
using namespace std;
使用cout和cin函数时,需要命名空间std,对吧?如果我尝试按照书上和讲师所说的去做,我的编译器 (g++) 就会出错。书上还说要用
void main()
而不是
int main()
如果我按照讲师或书上说的去做,我在编译过程中会出错。怎么了?我在 Linux Mint 17 上使用 g++ 进行编译。
这本书似乎非常过时了。得到一个new one.
不要写<iostream.h>
,<iostream>
是正确的(所有标准头都一样)。
不要用using namespace std;
,here就是为什么。请改用 std::cout << "Hello World\n";
等完全限定名称。
您的 main 应该是 int main ()
或 int main (int argc, char **argv)
,具体取决于您是否要处理命令行参数。
此外,不要使用 TurboC++,它已经过时了。
据我所知和我的教授上次告诉我们的:
您可以选择是否包含在 .h
中。 .h
通常是旧版本。同样,using 命名空间现在对您来说是可选的。 (并不意味着这是一个好的做法,但作为学生,许多学校都允许这样做。)
有些书解释了 using namespace,有些则没有。
那么使用命名空间和不使用命名空间有什么区别呢?
例如使用cout
。如果您在代码开头使用了命名空间 std。你可以简单地这样做:
cout << "hello" ;
但是,如果您没有添加行 using namespace std;
。你必须这样写:
std::cout << "hello";
顺便说一句,我上大学的时候我们总是在学校使用int main()
。我认为 void main()
不是个好主意。
你的讲师和他的书 incorrect/depend 讲述了 20 年前的事情。
在 1998 年 C++ 标准化之前,许多编译器(或者更确切地说:它们的库实现)确实知道 header <iostream.h>
,其中命名空间 [=11= 中的几个符号] 在标准 C++ 中存在于全局命名空间中。哪些符号在不同的编译器之间完全不同,就像当时的许多事情一样。这些 header 没有包含在 1998 年的 C++ 标准中,以后也没有。今天,最新的编译器将完全拒绝尝试使用它们的代码。
但这并不能使你的讲师相信他在过去 15 年里是错的,所以你可以向他展示以下内容(如果你相信这样做不会让你成为终生的敌人):
This 是 C++11 标准的最后一个公开可用草案的 link,您可以合理地期望它今天能够使用。打开它,转到 第 429 页(或搜索 [headers]),看到列出了 <iostream>
而 <iostream.h>
不是。
请参阅 [内容] 中 第 428 页 的底部,标准库的符号位于命名空间 std
中:
All library entities except macros, operator new
and operator delete
are defined within the namespace std
or namespaces nested within namespace std
. (...)
此外,关于 main
功能,请转到 第 61 页 (或搜索 [basic.start.main]) 看到 void main
是不允许的:
An implementation shall not predefine the main
function. This function shall not be overloaded. It shall have a return type of type int
, but otherwise its type is imlementation-defined. All implementations shall allow both of the following definitions of main
:
int main() { /* ... */ }
and
int main(int argc, char *argv[]) { /* ... */ }
(...)
(强调我的)
我是一名正在学习C++的学生。我已经浏览了互联网上的教程。它们在某些包含文件后都不使用.h扩展名,例如
#include <iostream>
但是我的C++讲师说我必须在iostream之后包含一个.h扩展名,例如:
#include <iostream.h>
我的书 "The Waite Group's Object Oriented Programming In Turbo C++" 由 Robert Lafore 撰写,也告诉我在 iostream 之后放置一个 .h 扩展名。我的讲师和书上都说在使用 cout 和 cin 函数时不需要有下面这行代码。
using namespace std;
使用cout和cin函数时,需要命名空间std,对吧?如果我尝试按照书上和讲师所说的去做,我的编译器 (g++) 就会出错。书上还说要用
void main()
而不是
int main()
如果我按照讲师或书上说的去做,我在编译过程中会出错。怎么了?我在 Linux Mint 17 上使用 g++ 进行编译。
这本书似乎非常过时了。得到一个new one.
不要写<iostream.h>
,<iostream>
是正确的(所有标准头都一样)。
不要用using namespace std;
,here就是为什么。请改用 std::cout << "Hello World\n";
等完全限定名称。
您的 main 应该是 int main ()
或 int main (int argc, char **argv)
,具体取决于您是否要处理命令行参数。
此外,不要使用 TurboC++,它已经过时了。
据我所知和我的教授上次告诉我们的:
您可以选择是否包含在 .h
中。 .h
通常是旧版本。同样,using 命名空间现在对您来说是可选的。 (并不意味着这是一个好的做法,但作为学生,许多学校都允许这样做。)
有些书解释了 using namespace,有些则没有。
那么使用命名空间和不使用命名空间有什么区别呢?
例如使用cout
。如果您在代码开头使用了命名空间 std。你可以简单地这样做:
cout << "hello" ;
但是,如果您没有添加行 using namespace std;
。你必须这样写:
std::cout << "hello";
顺便说一句,我上大学的时候我们总是在学校使用int main()
。我认为 void main()
不是个好主意。
你的讲师和他的书 incorrect/depend 讲述了 20 年前的事情。
在 1998 年 C++ 标准化之前,许多编译器(或者更确切地说:它们的库实现)确实知道 header <iostream.h>
,其中命名空间 [=11= 中的几个符号] 在标准 C++ 中存在于全局命名空间中。哪些符号在不同的编译器之间完全不同,就像当时的许多事情一样。这些 header 没有包含在 1998 年的 C++ 标准中,以后也没有。今天,最新的编译器将完全拒绝尝试使用它们的代码。
但这并不能使你的讲师相信他在过去 15 年里是错的,所以你可以向他展示以下内容(如果你相信这样做不会让你成为终生的敌人):
This 是 C++11 标准的最后一个公开可用草案的 link,您可以合理地期望它今天能够使用。打开它,转到 第 429 页(或搜索 [headers]),看到列出了 <iostream>
而 <iostream.h>
不是。
请参阅 [内容] 中 第 428 页 的底部,标准库的符号位于命名空间 std
中:
All library entities except macros,
operator new
andoperator delete
are defined within the namespacestd
or namespaces nested within namespacestd
. (...)
此外,关于 main
功能,请转到 第 61 页 (或搜索 [basic.start.main]) 看到 void main
是不允许的:
An implementation shall not predefine the
main
function. This function shall not be overloaded. It shall have a return type of typeint
, but otherwise its type is imlementation-defined. All implementations shall allow both of the following definitions ofmain
:
int main() { /* ... */ }
and
int main(int argc, char *argv[]) { /* ... */ }
(...)
(强调我的)