IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言之模块化、预处理(条件编译) -> 正文阅读

[C++知识库]C语言之模块化、预处理(条件编译)

1. C 模块化

  • 模块化编程的核心思想: 将系统的各个功能进行封装,变成一个个独立的模块,其他人只需要使用你所提供的 函数 和 变量 等,就可以完成相对应的功能.

  • 模块化的本质也就是,新建一个.c和.h文件

1.1. 头文件 .h

#include 可以引用用户和系统头文件。

1.1.1. 用户头文件

  • 为了防止 一个头文件被引用两次,编译器会处理两次头文件的内容 的错误.
    标准的做法是把文件的整个内容放在条件编译语句中,如下:

    文件名 Xxx.h 开头大写

    #ifndef HEADER_FILE
    #define HEADER_FILE
    
    the entire header file file( 定义宏, 定义结构体, extern 变量, 声明函数 )
    
    #endif
    
  • HEADER_FILE 格式:

    1. 以 _ 开头(结尾);
    2. 将 . 换成 _ ;
    3. 字符全部大写.

1.1.2. extern 关键字

extern 这个关键字的真正的作用是引用不在同一个文件中的变量或者函数

    1. .h文件定义extern变量文件:   extern unsigned int **全局**变量名
    2. .c文件使用extern变量的文件: unsigned int **全局**变量名

1.2. c文件

    1. include "xxx.h" // .c文件中,开头小写(.h文件 开头大写)
    2. 将.h文件中的 `extern` 关键字修饰的变量 在.c文件中去掉 `extern` 再声明一次
    3. 将.h文件中的函数声明写出函数体.

2. 预处理指令(以 # 开头)

2.1. 宏定义

#define  标识符()  常量   //注意, 最后没有分号

程序中用标识符来表示这个常量. 一直到源程序结束, 提前终止:

#undef  标识符

2.2. 条件编译

  • #if、#elif、#else 和 #endif 都是预处理命令,
  • 在预处理阶段执行, 根据情况保留代码, 不仅保证了代码正确, 还减小了编译后文件的体积. 这种机制被称为条件编译

在这里插入图片描述

### 2.2.1. DEBUG实例 
```c
/* 条件编译: 只保留符合条件的代码 */
#include <stdio.h>

#define DEBUG 1 // 0 NO; 1 YES

int main()
{
#if DEBUG
    printf("DEBUG...\n");
#endif

    return 0;
}
```

2.3. #ifdef、#ifndef、#endif

#ifdef     判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef    与#ifdef相反,判断某个宏是否未被定义

实例链接

2.4. defined() 运算符

预处理器 defined 运算符是用在常量表达式中的,用来确定一个标识符是否已经使用 #define 定义过。
已定义,则值为真(非零)。
未定义,则值为假(零)。

#include <stdio.h>

#define DEBUG "定义DEBUG" //定义DEBUG

#if defined(DEBUG) //DEBUG已经定义了, true
#undef DEBUG
#define DEBUG printf("您已定义DEBUG\n")

#else
#define DEBUG printf("已为您定义DEBUG\n")

#endif
int main()
{
    DEBUG;

    return 0;
}

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:38:18  更:2022-09-24 20:39:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 13:16:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码