进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)

简介: 进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)

2.4#undef

知识点:

作用是对#define定义的常量进行移除

基本形式:#undef + 所要移除常量的名称

image.png

2.5命令行定义

C语言提供了可以通过终端的方式对符号进行定义(如:gcc -D a = 100 test.c)

一般用于:一个变量先暂时不被定义,就能方便根据后面的具体情况来定

2.6条件编译

知识点:

可以对语句进行选择性的编译/放弃编译(因为有些代码删除了还有点可惜,就留着不编译)

在预处理阶段处理:

1.判断是否为真

#if 常量表达式(为真进去,反之不进)

      ....

#endif (和#if配套)

#if 常量表达式(其用法和if语句几乎一样,)

       //...

#elif 常量表达式

       //....

#else

       //...

#endif (结束)

2.判断是否被定义

#if define(symbol)

#ifdef symbol  (上下等价)

#if !define(symbol)

#ifndef symbol

细节:

如:

#define PRINT 0
int main()
{
#ifdef PRINT //是否定义该符号,定义了则进去,否则不进去
//#if define(PRINT) 
    printf("%d\n", 1);
#endif//和ifdef是一组的,必须成对出现
    return 0;
}
//
#define M 2
int main()
{
#if 1
  printf("%d\n", 1);//打印1
#endif
#if M == 1
  printf("%d\n", 1);
#elif M == 2
  printf("%d\n", 2);//打印2
#else
  printf("ohuo");
#endif
  return 0;
}

2.7文件包含

2.7.1文件包含的方式

本地文件包含("  "双引号包含):先在源文件所在的目录下查找,若没找到就在到存放库函数的标准路径下查找。若还找不到则提示编译错误(一般自己创建的头文件是直接放在源目录底下的所以就通过双引号包含即可,并且通过了解了双引号包含就能知道其实库函数的包含也可以用" "包含即#include"stdio.h")

库文件的包含(< >的包含):虽然" "可以实现但是对于库函数来说还是有点麻烦了所以C语言提供了直接到标准路径中去查找头文件(即#include<stdio.h>)

2.7.2文件的嵌套包含

对于头文件的包含来说每一次的包含其实都是将头文件的内容拷贝过来,假如不小心多次包含了同一个头文件的话,就会导致内存的浪费(已经包括过了)

为了防止上述情况我们就可以在头文件中写成如下形式:

#ifndef __def__//判断是否被定义过
#define __def__//若没有定义过则进来定义一遍,反之则不进,这样当第二次来时一定是被定义过的
struct s
{
  int a;
};
#endif//结束
//或则还可以更简单的写成
#pragma once//和上面的意思一样
struct s
{
  int a;
};

本章完。预知后事如何,暂听下回分解。

相关文章
|
4月前
|
程序员 编译器 C语言
C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项
本文深入解析C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项,并通过实际案例分析,展示预处理器指令在代码编写与处理中的重要性和灵活性。
113 2
|
5月前
|
编译器 C语言
C语言:typedef 和 define 有什么区别
在C语言中,`typedef`和`#define`都是用来创建标识符以简化复杂数据类型或常量的使用,但它们之间存在本质的区别。`typedef`用于定义新的数据类型别名,它保留了数据类型的特性但不分配内存。而`#define`是预处理器指令,用于定义宏替换,既可用于定义常量,也可用于简单的文本替换,但在编译前进行,过度使用可能导致代码可读性下降。正确选择使用`typedef`或`#define`可以提高代码质量和可维护性。
加快软盘操作速度的汇编程序源代码
加快软盘操作速度的汇编程序源代码
|
7月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
190 3
|
7月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
286 0
|
8月前
|
语音技术 C语言 Windows
语音识别------ffmpeg的使用01,ffmpeg的安装,会做PPT很好,ffmpeg不具备直接使用,只可以操作解码数据,ffmpeg用C语言写的,得学C语言,ffmpeg的安装
语音识别------ffmpeg的使用01,ffmpeg的安装,会做PPT很好,ffmpeg不具备直接使用,只可以操作解码数据,ffmpeg用C语言写的,得学C语言,ffmpeg的安装
8086 汇编笔记(五):包含多个段的程序
8086 汇编笔记(五):包含多个段的程序
|
10月前
|
编译器 开发者 C++
8086 汇编笔记(三):第一个程序
8086 汇编笔记(三):第一个程序
|
10月前
|
C语言 数据安全/隐私保护
C语言练习题
C语言练习题
64 1
|
9月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读