C语言中的预处理器 # 和 ##

编程 专栏收录该内容
¥29.90 ¥99.00
355篇文章

C语言中的预处理器 # 和 ##

C语言是一门编译型语言,它通过将源代码文件编译为可执行程序来实现运行程序。C语言的编译过程可以分为四个步骤:预处理、编译、汇编和链接。其中预处理器是C语言编译的第一个阶段,也是我们本文要讨论的主题 - # 和 ## 运算符的背景所在。

#[预处理指令]

是C语言中的一个预处理指令,它的作用是将后面跟随的字符转换为一个字符串常量。这个字符串常量可以用在程序的其他部分。例如,如果我们要输出一个字符串常量“Hello, World!”到终端,可以使用以下代码:

#include <stdio.h>
#define MESSAGE "Hello, World!"
int main()
{
    printf("%s\n", MESSAGE);
    return 0;
}

上述代码中,我们用 #define 定义了一个名为 MESSAGE 的宏,它的值为“Hello, World!”,然后在函数中使用该宏来输出字符串。

##[连接两个标识符]

是另一个预处理指令,它的作用是将两个标识符连接成一个新的标识符。这个新的标识符可以用在宏定义、变量定义等地方。例如,如果我们想在程序中声明一个名为 fooi 的整数变量,其中 i 是一个数字,可以使用以下代码:

#define CONCAT(x,y) x##y
int main()
{
    int CONCAT(foo, 1);
    foo1 = 10;
    printf("%d\n", 
C语言预处理器 # 和 ## 超详细精讲 作用:将宏参数,直接转换成双引号包裹的字符串字面量。#宏参数硬性限制:# 只能作用于宏的参数,不能直接修饰普通文本。仅做参数字符串化标准C语法,全编译器通用(GCC/ARMCC/MSVC),无兼容性问题不修改参数值,只转换文本格式作用:拼接两个预处理Token(记号),合并成一个全新的标识符/数字记号。A##B,预处理阶段直接将 AB 文本粘合为一体。## 有严格使用限制,仅支持拼接两类合法Token标识符:变量名、函数名、宏名、结构体名(字母/数字/下划线组成)数字常量。 阅读详情

相关推荐

【C语言】Preprocessor预处理器

C语言,预处理指令。

Mopoke的博客 1233

C语言#和##连接符在项目中的应用(漂亮)

之前看见ST官方一个老外的风格,看完之后大赞。 看看他是怎么写的: #ifndef RINGBUFF_HDR_H #define RINGBUFF_HDR_H #ifdef __cplusplus extern "C" { #endif #include <string.h> #include <stdint.h> /** * \defgroup RI...

Bruce.yang的嵌入式之旅 1827

C语言中的预处理符号#和##的用法

综上所述,预处理符号#和##在C语言中具有重要的作用。#符号可用于将宏参数转换为字符串,而##符号可用于将两个标识符连接在一起。这些功能使得C语言的预处理器更加灵活和强大,为程序员提供了更多的提供了更多的编程技巧和工具。预处理器指令以井号(#)开头,其中包括了一些特殊符号,如#和##。这篇文章将详细介绍C语言中这两个符号的用法,并通过示例代码加以说明。在上面的代码中,我们定义了一个宏函数。在上面的代码中,我们定义了一个宏函数。,并使用#符号将其转换为字符串。,使用##符号将它们连接在一起。

带你成为别人眼中的大佬! 628

如何根据芯片手册时序图编写驱动程序

如何根据芯片手册时序图编写驱动程序 对于电子开发者来说,刚刚拿到一个芯片,常用的芯片可以参考网上的例程来做深入了解,对于一个不常用的芯片来说,Datasheet几乎是使用芯片的唯一的资料,所以根据Datasheet时序图写出对应的驱动程序就尤为重要。 本文根据一个简单的例子来阐述根据时序图来编写对应的程序过程。旨在讲解对于初学者应该怎么利用芯片的时序图编写符合要求的底层驱动程序(老鸟请跳过)。 下载芯片的Datasheet,(个人常用http://www.21icsearch.com/)如..

weixin_36447711的博客 1万+

思科9117AP从零配置EWC模式实战:Wi-Fi6网络搭建避坑指南

本文详细介绍了思科9117AP在Wi-Fi6网络环境下配置EWC模式的实战指南,涵盖镜像准备、网络环境配置、模式转换步骤及高级运维技巧。通过EWC模式,企业可实现控制器与AP的一体化部署,显著降低成本和简化运维,特别适合中小企业Wi-Fi6网络搭建。

weixin_28318011的博客 333

InfiniBand(IB)实战指南:从硬件配置到性能优化

本文是一份详尽的InfiniBand实战指南,涵盖从硬件选型、部署到驱动配置、性能优化的全流程。重点解析了InfiniBand作为AI训练与高性能计算(HPC)核心网络的优势,特别是其支持的RDMA技术如何实现微秒级低延迟。文章提供了硬件匹配、NCCL压测、内核参数调优及在PyTorch分布式训练中启用IB的实操步骤,旨在帮助工程师构建和优化高性能计算集群。

mqtt6iot的博客 582

验证(uvm常见问题)--子类和父类的句柄和对象问题

sv中的子类和父类 在sv中,有如下两个类,child继承于parent。然后在test module中,正确转换的方法如下面所示。其中c1,c2,p1 都指向了同一个子类的对象c1。总结如下: 一个子类的对象是包括子类的成员变量,方法和父类的成员变量,方法。 子类的句柄c1可以直接赋值给父类的句柄p1,此时p1只可以访问父类的成员变量和方法,或者子类的虚方法,比如下面调用p1.display是...

q876507447的博客 7633

手把手教你用UC3844设计多路输出反激电源(附PCB布局避坑指南)

本文详细介绍了使用UC3844设计多路输出反激电源的实战技巧,包括核心电路设计、变压器参数计算、PCB布局优化及EMI抑制方法。通过实验室实测数据和项目经验,帮助工程师避开常见设计陷阱,提升电源性能和可靠性。特别附赠PCB布局避坑指南,助力高效完成开关电源设计。

weixin_30300225的博客 570

用CentOS 7安装cadence搭建适合IC Design的科研环境(四)——IC617、MMSIM151、calibre2015安装过程step by step

以下操作都在root权限下执行。建立安装目录建议把这种大型软件装在/opt目录下。mkdir -p /opt/cadence/installscape mkdir -p /opt/mentor/Calibre2015其中-p参数是直接建立父目录。因为IC617和MMISM151会自己建立安装目录,所以在这里没有建相关目录。而calibre则是默认安装在安装包所在的目录下,所以需要提前建立。解压安

maxwell2ic的博客 7万+

TC3XX - MCAL知识点(九):PWM EB-tresos配置说明及代码浅析

脉冲宽度调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器驱动是GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。软硬件匹配关系如下:PWM直接引用的是GTM与CCU6模块,然后GTM与CCU6再关联到Port的,根据软硬件匹配关系,也能调用中断来使用,本例子没使用中断。CCU6是一个高分辨率的16位捕获和比较单元,具有特定的应用模式,主要用于交流驱动控制。特殊的工作模式支持控制无刷直流电机使用霍尔传感器或反电动势检测。

梦想技术家 2888

基于Simulink的电动车PMSM能量泄放与回收系统仿真设计

摘要 本文设计了一个基于Simulink的电动车PMSM能量泄放与回收系统仿真模型。系统采用分层建模方案,包含永磁同步电机(PMSM)矢量控制、电池管理和泄放功率计算等核心模块。通过详细的参数计算和MATLAB脚本实现,模拟了电动车在制动时的能量回收过程。重点研究了泄放电阻的控制策略,提出基于母线电压和电池SOC的多目标优化算法,确保系统在保护硬件安全的同时最大化能量回收效率。仿真模型包含完整的数学推导和模块搭建指南,为电动车能量管理系统设计提供了有效的仿真验证平台。

huanghm88的专栏 193

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 【C++ STL中常用的容器类型】——一篇详细介绍C++ Standard Template Library中常用容器类型的文章。C++中的STL提供了许多数据...
下一篇: boost::hana::detail::has_duplicates用法分析及测试代码
普通网友
博客等级 码龄3年 606粉丝 2892原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值