当前位置: 首页 > news >正文

C语言预处理学习笔记

1. 预处理器的功能

预处理器(Preprocessor)在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头,主要包括文件包含、宏定义、条件编译等功能。

2. 文件包含

文件包含功能用于在一个文件中包含另一个文件的内容,通常用于包含头文件。

2.1 #include 指令

#include指令用于包含头文件。头文件可以是标准库头文件或用户自定义头文件。

标准库头文件

标准库头文件使用尖括号<>括起来。

#include <stdio.h>
#include <stdlib.h>
用户自定义头文件

用户自定义头文件使用双引号""括起来。

#include "myheader.h"

3. 宏定义

宏定义用于定义宏常量和宏函数,便于代码的重用和管理。

3.1 定义宏常量

#define指令用于定义宏常量。

#define PI 3.14
#define MAX_SIZE 100

3.2 定义宏函数

宏函数是一种简单的文本替换,不进行参数类型检查和计算。

#define SQUARE(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))

3.3 取消宏定义

#undef指令用于取消宏定义。

#undef PI

4. 条件编译

条件编译用于根据条件选择性地编译代码,便于跨平台开发和调试。

4.1 #if#endif 指令

#if 指令用于在条件为真时编译代码块。

#define DEBUG 1#if DEBUGprintf("Debug mode\n");
#endif

4.2 #ifdef#endif 指令

#ifdef 指令用于在宏已定义时编译代码块。

#define FEATURE_ENABLED#ifdef FEATURE_ENABLEDprintf("Feature is enabled\n");
#endif

4.3 #ifndef#endif 指令

#ifndef 指令用于在宏未定义时编译代码块。

#ifndef MAX_SIZE#define MAX_SIZE 100
#endif

4.4 #else#elif 指令

#else#elif 指令用于在条件为假时编译代码块。

#define VALUE 10#if VALUE < 5printf("Value is less than 5\n");
#elif VALUE < 15printf("Value is less than 15\n");
#elseprintf("Value is 15 or greater\n");
#endif

5. 常用的预定义宏

预定义宏是编译器预定义的宏,可以在程序中使用。

5.1 __FILE__

__FILE__宏表示当前源文件的名称。

printf("Current file: %s\n", __FILE__);

5.2 __LINE__

__LINE__宏表示当前源文件的行号。

printf("Current line: %d\n", __LINE__);

5.3 __DATE__

__DATE__宏表示当前编译日期。

printf("Compile date: %s\n", __DATE__);

5.4 __TIME__

__TIME__宏表示当前编译时间。

printf("Compile time: %s\n", __TIME__);

5.5 __FUNCTION__

__FUNCTION__宏表示当前函数的名称。

void myFunction() {printf("Current function: %s\n", __FUNCTION__);
}

6. 宏和函数的区别

  • 宏在预处理阶段进行文本替换,不进行参数类型检查和计算。
  • 函数在编译阶段进行实际调用,具有参数类型检查和计算。

6.1 宏示例

#define SQUARE(x) ((x) * (x))int main() {int a = 5;printf("Square of %d: %d\n", a, SQUARE(a));return 0;
}

6.2 函数示例

int square(int x) {return x * x;
}int main() {int a = 5;printf("Square of %d: %d\n", a, square(a));return 0;
}

相关文章:

C语言预处理学习笔记

1. 预处理器的功能 预处理器&#xff08;Preprocessor&#xff09;在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头&#xff0c;主要包括文件包含、宏定义、条件编译等功能。 2. 文件包含 文件包含功能用于在一个文件中包含另一个文件的内容&#xff0c;通常用…...

LLM基础环境准备-云服务器

软件环境 腾讯云 操作系统&#xff1a; TencentOS Server 3.1 (TK4) Python: 3.9.0(使用 conda的虚拟python环境&#xff0c;可根据实际需要更换版本&#xff0c;当前使用的是3.9.0的版本) CUDA Version: 12.2&#xff08;腾讯云会自动安装&#xff09; Driver Version: 5…...

网络协议相关知识有哪些?

前言 网络协议的基础是OSI和TCP/IP模型,这两个模型是理解协议分层的关键。 正文(仅是个人理解,如有遗漏望海涵) 网络协议是网络中设备间通信的规则和标准,涉及数据传输、路由、错误控制等多个方面。以下是网络协议相关知识的系统梳理: 一、网络协议分层模型 1、OSI七…...

基于Llama 3.2-Vision的医学报告生成

记录运用大模型解决医学报告实例&#xff0c;仅介绍本地调用的情况。 前情提要 已安装 Python 显存不少于8G&#xff08;8G设备上测试成功&#xff0c;其他环境可以自行测试&#xff09;。 需要安装Ollama (Ollama 是一个允许在本地运行多模态模型的平台)。 方式1&#xff1…...

离线部署大模型:ollama+deepseek+open-webui

ollama 是一个开源的本地大语言模型运行框架&#xff0c;它提供了非常简单便捷的使用形式&#xff0c;让用户可以十分方便的在本地机器上部署和运行大型语言模型&#xff0c;从而实现免费离线的方式使用 LLM 能力&#xff0c;并确保私有数据的隐私和安全性。 1 ollama 安装 o…...

如何看nginx.conf文件?

是的&#xff0c;你的理解是对的&#xff01;在 Nginx 配置中&#xff0c;最内层的 location 确实是决定请求最终处理的“入口”。当请求进入 Nginx 时&#xff0c;Nginx 会根据请求的路径&#xff08;即 URL&#xff09;匹配 location 块&#xff0c;然后按照匹配的顺序逐层向…...

3月营销日历:开启春日盛宴,绽放生活魅力

关键营销节点∶惊蛰、女生节、妇女节、 植树节、315消费者权益日、春分 营销关键词 养生、女生魅力、感恩女性、环保、品质 01.重点关注品类 春季服饰&#xff1a;如轻薄外套、春装等&#xff0c;适合惊蛰后的市场需求&#xff1b; 美妆护肤&#xff1a;妇女节期间&#xf…...

pdf预览在vue项目中的使用兼容ie浏览器

一、下载pdf预览插件 链接: https://pan.baidu.com/s/1wuzay-saAfiqtS-efd-cvw?pwd6m78 提取码: 6m78 二、创建一个pdf文件夹&#xff0c;将下载下来的文件build和web文件夹复制到pdf文件夹下 三、项目中使用 (路径由两部分组成&#xff0c;第一部分是项目存放pdf插件的路径…...

Unity面板介绍_Project工程面板(23.1.1)

一、project(工程界面) 显示当前工程所有资源文件&#xff08;场景、脚本、音频、图片。。&#xff09; Assets资源文件、Library库文件、Project setting项目设置、Temp临时文件 二、面板大致...

使用Termux将安卓手机变成随身AI服务器(page assist连接)

通过以下方法在安卓手机上运行 Ollama 及大模型&#xff0c;无需 Root 权限&#xff0c;具体方案如下&#xff1a; 通过 Termux 模拟 Linux 环境运行 核心工具&#xff1a; 安装 &#xff08;安卓终端模拟器&#xff09;()]。借助 proot-distro 工具安装 Linux 发行版&#xf…...

MacOS安装Emacs

个人博客地址&#xff1a;MacOS安装Emacs | 一张假钞的真实世界 在MacOS X上可以使用Homebrew 安装Emacs&#xff1a; $ brew install emacs --with-cocoa 或者用MacPorts&#xff1a; $ sudo port install emacs-app OSX Emacs 网站提供了通用的二进制包。 前两种方法安装…...

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应&#xff08;标签&#xff09;、样本权重…...

3.1 actor基本框架(c#的Akka.Actor模式)

1.最简单的一个框架 代码如下&#xff08;代码容易理解&#xff09;&#xff1a; using System; using Akka.Actor; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography.X509Certi…...

Git使用[同一电脑多个账户ssh-key的管理]

同一电脑多个账户ssh-key的管理 现在遇到一个问题,我同一台电脑既要通过VPN访问内网的git也要访问对外释放的gitee,刚开始我直接把原来的SSH-key添加到内网的gitlab发现可以访问,但是后来再方位外网的gitee就出问题了,看来要换一种手段才行 本文引用&#xff1a;https://cloud…...

使用Python结合`stable-baselines3`库(包含PPO和TD3算法)以及`gym`库来实现分层强化学习的示例代码

以下是一个使用Python结合stable-baselines3库&#xff08;包含PPO和TD3算法&#xff09;以及gym库来实现分层强化学习的示例代码。该代码将环境中的动作元组分别提供给高层处理器PPO和低层处理器TD3进行训练&#xff0c;并实现单独训练和共同训练的功能。 代码实现 import g…...

【论文笔记】MambaGlue: Fast and Robust Local Feature Matching With Mamba

【引用格式】&#xff1a;Ryoo K, Lim H, Myung H. MambaGlue: Fast and Robust Local Feature Matching With Mamba[J]. arXiv preprint arXiv:2502.00462, 2025. 【网址】&#xff1a;https://arxiv.org/pdf/2502.00462 【开源代码】&#xff1a;https://github.com/uri-Ka…...

基于 Stanford CoreNLP 的中文自然语言处理

一、概述 Stanford CoreNLP 是斯坦福大学开发的一款强大的自然语言处理&#xff08;NLP&#xff09;工具&#xff0c;支持多种语言的文本处理&#xff0c;包括中文。本文将详细介绍如何使用 Stanford CoreNLP 实现中文文本的分词、词性标注、命名实体识别、句法分析等功能&…...

python 量化交易入门到提升详细教程,python量化交易教程

文章目录 前言入门阶段1. 环境准备安装 Python选择开发环境安装必要的库 2. 金融数据获取3. 简单策略构建 - 移动平均线交叉策略 进阶阶段1. 策略回测2. 风险管理3. 多因子策略4. 机器学习在量化交易中的应用5. 高频交易策略 前言 Python 作为一门功能强大、易于学习且应用广泛…...

如何设置爬虫的访问频率?

设置爬虫的访问频率&#xff08;即请求间隔&#xff09;是确保爬虫稳定运行并避免对目标服务器造成过大压力的关键步骤。合理的访问频率不仅可以减少被目标网站封禁IP的风险&#xff0c;还能提高爬虫的效率。以下是一些设置爬虫访问频率的方法和最佳实践&#xff1a; 1. 使用s…...

前端循环全解析:JS/ES/TS 循环写法与实战示例

循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6 及 TypeScript 中各种循环的写法、特性&#xff0c;并通过实际示例帮助你掌握它们的正确使用姿势。 目录 传统三剑客 for 循环 while 循环 do...while 循环 ES6 新特性 forEach for...of for...in 数组…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...