zoukankan      html  css  js  c++  java
  • C++基础知识(2)

    作为接口的函数头

    C++函数可被其他函数激活或调用,函数头描述了函数与调用它的函数之间的接口。

    在C语言中,省略返回类型相当于说函数的类型为int,然而,C++逐步淘汰了这种用法

    也可以使用下面的变体:

    int main(void)

    在括号中使用关键字void明确地指出,函数不接受任何参数,在C++(不是C)中,让括号空着与在括号中使用void等效(在C中,让括号空着意味着对是否接受参数保持沉默)

    如果编译器到达main()函数末尾时没有遇到返回语句,则认为main()函数以如下语句结尾:

    return 0;

    这条隐含的返回语句只适用于main()函数,而不适用于其他函数

    C++预处理器和iostream文件

    C++和C一样,也使用一个预处理器,该程序在进行主编译之前对源文件进行处理,有些C++实现适用翻译器程序将C++程序转换为C程序,虽然翻译器也是一种预处理器,但这里不讨论这种预处理器,而只讨论这样的预处理器,即它处理名称以#开头的编译指令,不必执行任何特殊的操作来调用该预处理器,它会在编译程序时自动运行。

    #include <iostream>

    该编译指令导致预处理器将iostream文件的内容添加到程序中,这是一种典型的预处理器操作:在源代码被编译之前,替换或添加文本

    #include <iostream>编译指令导致iostream文件的内容随源代码文件的内容一起被发送给编译器。实际上,iostream文件的内容将取代程序中的代码行#include <iostream>,原始文件没有被修改,而是将源代码文件和iostream组合成一个复合文件,编译的下一阶段将使用该文件

    头文件名

    像iostream这样的文件叫做包含文件(include file),由于它们被包含在其他文件中;也叫头文件(header file),由于它们被包含在文件起始处,C语言的传统是,头文件使用扩展名h,将其作为一种通过名称标识文件类型的简单方式,例如,头文件math.h支持各种C语言数据函数,但C++用法变了,现在对老式C的头文件保留了扩展名h(C++程序仍可以使用这种文件),而C++头文件则没有扩展名,有些C头文件被转换为C++头文件,这些文件被重新命名,去掉了扩展名h(使之成为C++风格的名称),并在文件名称前面加上前缀c,标明来自C语言

    C++旧式风格          以.h结尾         iostream.h            C++程序可用

    C旧式风格              以.h结尾         math.h                  C、C++程序可用

    C++新式风格          没有扩展名    iostream                C++程序可以使用,使用namespace std

    转换后的C              加上前缀c,没有扩展名  cmath   C++程序可以使用,可以使用不是C的特性,如namespace std

    名称空间

    如果使用iostream,而不是iostream.h,则应使用下面的名称空间编译指令来使iostream中的定义对程序可用:

    using namespace std;

    这叫做using编译指令,iostream文件中定义了名称空间std,特别地,头文件string中也有名称空间std,

    如果使用如下编译:

    #include<iostream>

    #include<string>

    using namespace std;

    则,iostream文件和string文件中的名称空间std都被包含进来

    详细解释:https://plutoblog.iteye.com/blog/986024

    函数原型

    在使用函数之前,C++编译器需要知道函数的参数类型和返回值类型,也就是说,函数是返回哪些类型信息,C++提供这种信息的方式是使用函数原型语句

    函数原型之于函数就想变量声明之于变量,之处涉及的类型。例如,C++库将sprt()函数定义成将一个可能带小数部分的数字作为参数,并返回一个相同类型的数字

    double sqrt(double)

    第一个double意味着sqrt()将返回一个double值,括号中的double意味着sqrt()需要一个double参数

    原型结尾的分号表明它是一条语句,这使得它是一个原型,而不是函数头,如果省略分号,编译器将把这行代码解释为一个函数头,并要求接着提供定义该函数的函数体

    对于C++库中的每一个函数,都在一个或多个头文件中提供了其原型

    不要混淆函数原型和函数定义,可以看出,原型只描述函数接口,也就是说,它描述的是发送给函数的信息和返回的信息,而定义中包含了函数的代码,库文件中包含了函数的编译代码,而头文件中则包含了原型

    头文件和库文件的区别

    C++库函数存储在库文件中,库文件是以二进制文件形式存在的,其中封装着函数接口,在编程中可以由其它源文件调用。库文件可分为静态库和动态库两种。

    头文件是指在C/C++编程中,可以写在程序里面,以#include 的形式包含的文件,是对库文件中函数的声明,对于C语言,一般以.h作为扩展名;对于C++,可以没有扩展名,也可以以.h或者.hpp做扩展名。规范中对头文件的扩展名并没有做约定,

    二者的区别为:
    1 头文件是文本文件,是可供阅读的;库文件是二进制文件,不可直接阅读。
    2 头文件在编译中使用;库文件在链接中使用。
    3 头文件中是函数或定义的声明,及少量内联函数的使用,一般不包含非静态函数实现;库文件中包含函数的实现。
    4 头文件是手动编写的,库文件是编译生成的。

    二者也有联系:
    1 虽然没有规定调用库函数必须引用头文件,但一般约定,当调用库函数的时候需要引用接口函数所在的头文件。
    2 一个库文件均有一组头文件与其对应。
    3 库文件和对应头文件的作者应为同一个。
    4 作者必须保证头文件中所声明的函数类型及参数列表,与库文件中的实现是相同的。

  • 相关阅读:
    linux性能监控三张图
    golang 之 defer(统计函数执行时间)
    golang之匿名函数
    php opcodes运行原理
    Mysql索引的类型
    字符串反转方法收集
    curl模拟请求常用参数
    windows10 使用gitblit搭建git服务器
    PHP程序员解决问题的能力
    mysql中union 查询
  • 原文地址:https://www.cnblogs.com/jiweilearn/p/10420495.html
Copyright © 2011-2022 走看看