zoukankan      html  css  js  c++  java
  • C++学习笔记(一):头文件和源文件

    说明:

    当一个源文件(a.cpp)要调用另一个源文件(b.cpp)定义的方法时,需要在a.cpp中写上这个方法的声明(只需要该方法的名称、返回值和参数,类似Java的接口);

    如果每次调用其他文件的方法时都写上相同的声明就会很麻烦,而且当b.cpp的定义修改时所有调用到该文件的声明都要修改,这样工作量太大且容易出错,所以出现了头文件,我们把所有的声明都存放到头文件中,需要使用到的时候使用宏命令“#include”包含进这个.cpp文件中即可;

    #include:只有一个功能:把它后面所写的那个文件的内容,完完整整地、一字不改地拷贝到当前的文件中来;

    而C++规定,定义只有一次,声明可以多次,导致头文件只能写声明,不能进行定义,如果头文件进行定义,被多个文件#include后,就会出现多个定义导致编译失败;

    头文件不会进行编译,只会通过#include被其他多个源文件包含,然后头文件中的内容作为源文件的一部分进行编译;

    需要注意的是,.h头文件不用写在编译器的命令之后,但它必须要在编译器找得到的地方、通常是和源文件位于同一个目录下;

    头文件的后缀名可用任意名称;

    预处理程序:

    预处理程序包含3种,分别是:宏定义、文件包含和条件编译。

    宏定义:

    宏定义使用“#define”后跟定义的字符串,宏定义的字符串会在编译时直接进行文本替换。

    1 #define PI 3.14159

    在程序中遇到的所有PI字符串都会被替换为3.14159。

    文件包含:

    文件包含有两种形式,其含义是讲制定的文件的内容拷贝到当前文件中。

    1 #include "filename"
    2 #include <filename>

    使用尖括号表示使用系统的文件,使用双引号表示在当前目录下进行查找(包含子目录),当然除了填写相对路径外还可以填写绝对路径。

    条件编译:

    1 #ifndef COMDEF_H
    2 #define COMDEF_H
    3 
    4 //头文件内容
    5 
    6 #endif

    使用上述宏命令可以使头文件的内容只被执行一次;

    要达到上面的目的还可以使用另一种方法:

    1 #pragma once

    注意:#ifndef需要避免同名的问题,但是该方法所有编译器都支持,而#pragma once可以避免命名的问题但是只有较新的编译器支持。

    extern:

    extern关键字指定当前的内容为声明;

    1 double up;//定义了up变量,并且赋值为0
    2 extern double up;//声明了外部的变量up,不会分配内存

    函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的;

    例外:

    const对象可以直接定义在头文件中;

    内联函数也可以直接定义在头文件中;

    类的定义放在头文件中,而类的函数成员的实现代码放在一个.cpp文件中;

  • 相关阅读:
    k8s命令
    git绿色、红色图标不显示的问题
    Git下载
    文档(PDF Word Excel PPT)转HTML前端预览方案
    腾讯云生成临时访问链接
    cron表达式的双重人格:星期和数字到底如何对应?
    Windows下nginx报错解决:CreateFile() "xxx/logs/nginx.pid" failed
    Windows命令行在任意位置启动和退出nginx
    解决博客园TinyMCE模式下内置插入代码块功能不支持Go语言的问题(两个并不完美的解决方案)
    linux系统调用system()函数详解
  • 原文地址:https://www.cnblogs.com/hammerc/p/3922135.html
Copyright © 2011-2022 走看看