【C/C++数据结构与算法】C语言预处理

news2024/11/27 22:26:18

目录

一、源文件到可执行程序的过程

二、预处理详解

1. 预定义符号

2. #define

3. 条件编译


一、源文件到可执行程序的过程

  • 预处理:去注释,宏替换,头文件展开,条件编译
  • 编译:c语言 ---> 汇编语言(语法分析、词法分析、语义分析、符号汇总)
  • 汇编:汇编语言 ---> 二进制指令,形成符号表
  • 链接:合并段表,符号表的合并和重定位

二、预处理详解

1. 预定义符号

  • __FILE__ 进行编译的源文件
  • __LINE__ 文件当前的行号
  • __DATE__ 文件被编译的日期
  • __TIME__ 文件被编译的时间
  • __func__ 当前的函数名
void Test() 
{
    printf("name:%s file:%s line:%d date:%s time:%s\n", 
            __func__, __FILE__, __LINE__, __DATE__, __TIME__);
    //name:Test file:test.c line:5 date:Mar 10 2023 time:16:27:41
}

int main() 
{
    Test();
    return 0;
}

2. #define

  • 符号替换
  • 宏替换
#include <stdio.h>
#define PRINT(N, format) printf("the value of "#N" is "format"\n", N)
 
int main() 
{
    int a = 10;
    float pai = 3.1415926;
    PRINT(a, "%d");        //the value of a is 10
    PRINT(pai, "%.2f");    //the value of pai is 3.14
    return 0;
}

##:将两端的符号合成一个符号

#include <stdio.h>
#define CAT(x, y) x##y
 
int main() 
{
    int ABC = 10;
    printf("%d\n", CAT(A, BC));    //10
    return 0;
}

宏的参数可以出现类型,函数不行

#define MALLOC(num, type) (type*)malloc(sizeof(type) * num)

用宏定义将一个整数的二进制位的奇数位和偶数位交换

#define SwapIntBit(n) (((n) & 0x55555555) << 1 | ((n) & 0xaaaaaaaa) >> 1)

用一个宏定义计算一个结构体中某成员变量相对于首地址的偏移

#include <stdio.h>
#define offsetof(StructType, MemberName) (size_t)&(((StructType*)0)->MemberName)
 
typedef struct Student 
{
    char name[20];
    int age;
    float score;
}Student;
 
int main() 
{
    Student stu;
    int n = offsetof(Student, score);
    printf("%d\n", n);        //24
    return 0;
}

3. 条件编译

#include <stdio.h>
#define a 2
 
int main() 
{
#if (a == 1)
    printf("hello world\n");
#elif (a == 2)
    printf("hello hdu\n");
#else
    printf("hello china\n");
#endif
    return 0;
}
#include <stdio.h>
#define MAX 0
 
int main() 
{
#if defined(MAX)
    printf("haha\n");
#endif
 
#ifdef MAX        //判断该符号是否定义
    printf("haha\n");
#endif
 
#if !defined(max)
    printf("hehe\n");
#endif
 
#ifndef max
    printf("hehe\n");
#endif
    return 0;
}

#pragma once 避免头文件的重复引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考高级系统架构设计师(二) 基础知识之计算机组成与系统结构

目录 概要 计算机组成结构 CPU组成 冯诺依曼结构 存储系统-层次化存储结构 高速缓冲存储器cache 主存编址计算 磁盘管理 磁盘管理算法 先来先服务&#xff08;FCFS&#xff09;&#xff1a; 最短寻道时间优先&#xff08;SSTF&#xff09; 扫描算法&#xff08;电梯调度…

【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

文章目录 1. 安装 Visual Studio2. 安装 Qt3. 联合Ref 先上一张效果图&#xff0c;具体步骤主要分为以下三步。 1. 安装 Visual Studio 这一步不再赘述&#xff0c;注意一定要安装 C 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 2. 安装 Qt 这一步也不再赘…

DAY10_HTTPTomcatServlet

目录 1 Web概述1.1 Web和JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 2 HTTP2.1 简介2.2 请求数据格式2.2.1 格式介绍2.2.2 实例演示 2.3 响应数据格式2.3.1 格式介绍2.3.2 响应状态码2.3.2.1 状态码大…

vue+element-ui初体验入门拥有自己的前台项目以及配置文件讲解(2)组件式开发,路由,请求发送

阿丹&#xff1a; 前面的文章已经进行了vue的组件安装&#xff0c;本篇文章来了解一下vue的语句语法以及element-ui的具体用法。并使用全局的守卫路由来完成用户完成登录来请求头携带token 导入axios以及导入element-ui 按照图片指引来到main.js将我们前面文章下载的组件进行…

基于matlab将天线工具箱与相控阵系统配合使用(附源码)

一、前言 创建天线阵列&#xff08;如均匀线性阵列 &#xff08;ULA&#xff09;&#xff09;时&#xff0c;可以使用相控阵系统工具箱中内置的天线。或者&#xff0c;您可以使用天线工具箱天线。天线工具箱天线提供物理天线的真实模型。它们是使用力矩的方法设计的。相控阵天线…

自动化测试工具 AirTest 的使用方法与简介

目录 前言&#xff1a; Airtest简介 1.基于图像识别的Airtest框架 2.基于UI识别的Poco框架 Airtest环境搭建 Airtest布局 Airtest使用步骤 第一步&#xff1a;连接移动设备 第二步&#xff1a;创建一个.air文件&#xff08;也就是我们的测试脚本&#xff09; 第三步&#xff1a…

相机去畸变

1. 背景 在做图像感知工作过程中会遇到需要处理相机畸变的情况&#xff0c;如SLAM、3D重建等&#xff0c;则需要了解一些常见相机模型的成像过程&#xff0c;以及依据成像过程实现去除相机成像的畸变。 注意&#xff1a;这篇文章并不涉及太多相机参数畸变原理&#xff0c;更多…

Vicuna模型权重合成及模型部署

第一式&#xff1a;Vicuna模型部署 1.环境搭建1.1 构建虚拟环境1.2 安装FastChat1.2.1 利用pip直接安装1.2.2 从github下载repository然后安装 2.Vicuna Weights合成2.1 下载vicuna delta weights2.2 下载原始llama weights2.3 合成真正的working weights2.3 填坑手册 3. 使用命…

第九章 os模块

1. os模块介绍 os 模块是Python 内置的与操作系统中的文件系统相关的模块&#xff0c;该模块依赖于操作系统。通常情况下&#xff0c;如不特别指出&#xff0c;该模块提供的方法、属性在Windows 和UNIX 系统上都是可用的。其中&#xff0c;UNIX 系统包括Linux 和Mac OS X 说明…

软件加密类型及原理特点总结

目录 一、软件加密目的 二、加密方式介绍 2.1 硬件加密 2.2 软件加密 三、软件加密方式 3.1非对称加密算法 3.2对称加密算法 四、数字签名 五、软件破解方式 参考文献 一、软件加密目的 防止软件被复制使用并恶意破坏&#xff0c;给企业和个人带来经济损失。 二、加密方…

杂记 | 使用Docker和Nginx为网站添加HTTPS访问功能

文章目录 01 准备工作1.1 HTTPS介绍1.2 准备工作 02 编写nginx.conf03 使用docker启动nginx 01 准备工作 1.1 HTTPS介绍 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种通过加密通信保护网站数据传输的协议。它是 HTTP 协议的安全版本&#xff0c;通…

ROS下写服务

话题和服务的对比&#xff1a; 1.话题 话题是单向的&#xff0c;而且不需要等待服务端上线&#xff0c;直接发就行&#xff0c;数据的实时性比较高。 频率高&#xff0c;实时性强的传感器数据的传递一般使用话题实现。 话题通信是ROS中使用频率最高的一种通信模式&#xff0c…

人工智能之后,量子计算将成为下一趋势

光子盒研究院 人工智能显然是席卷科技行业的最新热潮&#xff0c;但一个更大的趋势可能即将到来&#xff0c;那就是量子计算——只要它能解决令人不安的网络安全问题。 量子计算的进展似乎注定要使今天的基于电子芯片的超级计算机逊色。这些机器在亚原子水平上工作&#xff0c;…

excel爬虫相关学习1:简单的excel爬虫

目录 1 什么是excel 爬虫 2 EXCEL爬虫 2.1 excel 爬虫的入口 2.2 需要配置的信息 2.2.1 如何获得 ua信息 2.3 获取的信息 2.3.1 获取信息的基本内容 2.3.2 获取过程 2.3.3 我们只用关注“表视图 ” 即可 2.4 EXCEL获得的爬虫数据 加载到excel里 2.5 数据到了excel表后…

解决关于由于找不到vcruntime140_1.dll丢失的解决方法(有效的解决方法)

vcruntime140_1.dll是什么什么文件呢&#xff1f;为什么电脑在运行一些游戏的时候会出现丢失vcruntime140_1.dll&#xff0c;然后游戏运行失败?这个dll文件是电脑重要的运行库文件。丢失了会导致很多程序无法运行。 本教程操作系统&#xff1a;Windows vcruntime140_1.dll丢失…

AN10834-MIFARE ISOIEC 14443 PICC selection.pdf

AN10834-MIFARE ISOIEC 14443 PICC selection.pdf 1简介 在读卡器&#xff08;系统&#xff09;和智能卡之间交换数据之前&#xff0c;必须正确选择智能卡。该卡选择过程&#xff08;卡激活&#xff09;在用于非接触式接近系统的ISO14443-3中进行了描述。非接触式应用的急剧增…

k8s部署成功后却显示结点一直处于NotReady状态解决方案

直接说结论&#xff1a;原因是服务器的/opt/cni/bin/目录中没有flannel插件&#xff0c;安装flannel 到/opt/cni/bin/目录下即可。具体步骤往下看。 [rootK8SMaster ~]# journalctl -f -u kubelet.service 先看下报错&#xff0c;发现我一直显示NotReady的原因是由于 [faile…

windows系统安装显卡驱动软件和CUDA11.1的详细教程

深度学习目标检测框架在进行图像计算时需要GPU进行加速&#xff0c;需要用到硬件GPU显卡&#xff0c;目标检测框架和硬件GPU建立联系需要通过①显卡驱动软件&#xff1b;②CUDA软件依次建立联系。这两个软件&#xff0c;可直接从NVIDIA官网下载&#xff0c;版本没有非常严格的需…

【玩转Linux操作】详细讲解Linux的 at定时任务

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars】 欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;基本介绍⭐怎么保证atd进程启动了 &#x1f354;at命…

Unity3D期末大作业(捕鱼达人)【免费开源】

目录 1 游戏简介 2 游戏各模块 2.1 主界面 2.2 加载界面 2.3 主游戏场景 2.4 游戏内道具 2.4.1 炮塔 2.4.2 技能 2.4.3 宝箱 2.4.4 鱼类 3 参考教程 4 项目地址 4.1 运行环境 4.2 源工程文件链接 4.3 结课报告 1 游戏简介 大部分人都玩过这个游戏吧&#xff0c;这…