首页 文章

使用.h扩展名

提问于
浏览
2

我是一名正在学习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 回答

  • 4

    这本书看起来非常过时 . 得到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,它非常过时 .

  • -1

    你的讲师和他的书不正确/取决于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 中:

    除了宏,operator new和operator delete之外的所有库实体都在命名空间std中嵌套的名称空间std或名称空间中定义 . (......)

    此外,关于 main 函数,转到 page 61 (或搜索 [basic.start.main] )以查看不允许 void main

    实现不应预定义主函数 . 此功能不应超载 . 它应该具有int类型的返回类型,否则其类型是imlementation-defined . 所有实现都应允许以下两个main定义:int main(){/ * ... * /}和int main(int argc,char * argv []){/ * ... * /}(.. . )

    (强调我的)

  • 11

    根据我的知识和我上次教授告诉我们的内容:

    您可以选择是否包含 .h . .h 通常是旧版本 . 现在再次使用using命名空间是可选的 . (这并不意味着这是一种很好的做法,但作为一名学生,很多学校都允许这样做 . )

    有些书籍使用命名空间解释,有些则没有 .

    那么使用命名空间而不使用命名空间有什么区别?

    cout 为例 . 如果您在代码的开头使用了命名空间std . 你可以这样做:

    cout << "hello" ;
    

    但是,如果您没有添加 using namespace std; 行 . 你必须这样写:

    std::cout << "hello";
    

    顺便说一下,当我在大学时,我们总是在学校里使用 int main() . 我不认为 void main() 是个好主意 .

相关问题