#和##运算符使用解析

C sharp 运算符整理 方便实用的C#运算符,帮助初学者记忆。 立即下载

编译预处理

专题三:编译预处理。包括以下章节:

  • 编译过程简介
  • 宏定义与宏使用分析
  • 条件编译使用分析
  • #error和#line
  • #pragma预处理分析
  • #和##运算符使用解析

#运算符

  • #运算符用于预编译期将宏参数转换为字符串

6-1.c

#include <stdio.h>

#define CONVERS(x) #x

int main()
{

    printf("%s\n", CONVERS(Hello world!));
    printf("%s\n", CONVERS(100));
    printf("%s\n", CONVERS(while));
    printf("%s\n", CONVERS(return));

    return 0;
}

6-1.i

# 1 "6-1.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "6-1.c"

/*......省略n行......*/

# 943 "/usr/include/stdio.h" 3 4

# 9 "6-1.c" 2



int main()
{

    printf("%s\n", "Hello world!");
    printf("%s\n", "100");
    printf("%s\n", "while");
    printf("%s\n", "return");

    return 0;
}

实例分析6-1

6-2.c

#include <stdio.h>

#define CALL(f, p) (printf("Call function %s\n", #f), f(p))

int square(int n)
{
    return n * n;
}

int f(int x)
{
    return x;
}

int main()
{

    printf("1. %d\n", CALL(square, 4));
    printf("2. %d\n", CALL(f, 10));

    return 0;
}

结果:
这里写图片描述

##运算符

  • ##运算符用于预编译期粘连两个符号

6-3.c

#include <stdio.h>

#define NAME(n) name##n

int main()
{

    int NAME(1);
    int NAME(2);

    NAME(1) = 1;
    NAME(2) = 2;

    printf("%d\n", NAME(1));
    printf("%d\n", NAME(2));

    return 0;
}

6-3.i

# 1 "6-3.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "6-3.c"

/*......省略n行......*/

# 943 "/usr/include/stdio.h" 3 4

# 2 "6-3.c" 2

int main()
{

    int name1;
    int name2;

    name1 = 1;
    name2 = 2;

    printf("%d\n", name1);
    printf("%d\n", name2);

    return 0;
}

结果:
这里写图片描述

实例分析6-2

6-4.c

#include <stdio.h>

#define STRUCT(type) typedef struct _tag_##type type;\
struct _tag_##type

STRUCT(Student)
{
    char* name;
    int id;
};

int main()
{

    Student s1;
    Student s2;

    s1.name = "s1";
    s1.id = 0;

    s2.name = "s2";
    s2.id = 1;

    printf("%s\n", s1.name);
    printf("%d\n", s1.id);
    printf("%s\n", s2.name);
    printf("%d\n", s2.id);

    return 0;
}

6-4.i

# 1 "6-4.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "6-4.c"

/*......省略n行......*/

# 943 "/usr/include/stdio.h" 3 4

# 2 "6-4.c" 2

typedef struct _tag_Student Student;struct _tag_Student
{
    char* name;
    int id;
};

int main()
{

    Student s1;
    Student s2;

    s1.name = "s1";
    s1.id = 0;

    s2.name = "s2";
    s2.id = 1;

    printf("%s\n", s1.name);
    printf("%d\n", s1.id);
    printf("%s\n", s2.name);
    printf("%d\n", s2.id);

    return 0;
}

结果:

这里写图片描述

【硬件开源实战】STM32G070RBT6开发板从设计到避坑全解析 本文全面解析了STM32G070RBT6开发板从硬件设计到避坑的实战经验。详细介绍了电源设计、时钟电路、PCB布局等关键环节,分享了成本控制、焊接测试、软件开发和外设驱动的实用技巧,帮助开发者高效完成项目开发。 阅读详情

相关推荐

vmware vsphere 证书过期告警处理方法

vSphere Clinet 管理页面出现“证书告警” ,检查证书未发现现有证书有过期现象

m0_51902127的博客 3639

解析宏定义中的 # 运算符和 ## 运算符

C语言宏定义中的 # 运算符和 ## 运算符介绍和使用。

jhdddd的博客 532

R语言clusterProfiler实战:GO与KEGG富集分析从入门到精通

本文提供了一份详尽的R语言clusterProfiler实战指南,从环境配置、数据导入、基因ID转换到GO与KEGG富集分析及可视化,手把手教你解读生物学意义。文章重点介绍了如何利用clusterProfiler这一强大工具,将差异基因列表转化为清晰的生物学通路与功能故事,并分享了结果解读、可视化以及处理非模式生物等进阶技巧与避坑指南。

weixin_29044713的博客 162

【C语言】宏的#和##的区别和用法

嵌入式面试经常会遇到的问题,有关#和##在使用上的作用有什么不同

Goforyouqp的博客 1万+

如何在R中高效安装ropls及其依赖包

本文详细介绍了在R语言中高效安装ropls包及其依赖的完整流程。作为Bioconductor生物信息学分析包,ropls的安装需通过BiocManager管理器进行。文章提供了标准安装步骤、跨系统避坑指南及安装后验证方法,帮助用户解决R版本、编译环境和网络镜像等常见问题,确保代谢组学数据分析工具顺利部署。

efc123456的博客 908

单晶塑性abaqus-umat自学

单晶塑性abaqus-umat 摘要1. 简介2. 单晶弹塑性本构模型回顾2.1运动学 本文以翻译黄永刚老师的umat文章为主,这个颜色的为个人的理解。 摘要 包含单晶塑性的abaqus用户材料子程序。本文回顾有限元形式的单晶弹塑性和黏弹塑性,包含小变形理论,以及严格的有限变形和有限旋转理论。单晶的非弹性变形由于晶体滑移,假定遵从Schmid准则。提出多种多样的分切应力与剪切变形的自硬化和潜硬化关系,并且包含在子程序内。 1. 简介   有限元程序ABAQUS已经广泛应用在固体的变形与应力分析。除了自身大量

Niklas4088的博客 1万+

【C】 25_#和##操作符分析

#运算符 # 运算符用于在预处理期将宏参数转换为字符串 # 的转换作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道 # 的转换作用 用法 #define STRING(x) #x printf("%s\n", STRING(Hello word)); 实例分析: #运算符的基本用法 #include <stdio....

weixin_34128501的博客 445

GIS分析-利用K-Means方法进行地震分析

通过“聚类”可以获得有关我们所拥有的数据的各种线索,这是数据挖掘技术之一。分析创建的组有助于决策过程。在这项研究中,我们将使用数据挖掘工具之一的K-Means方法研究安纳托利亚东部地区近100年发生的地震的空间分布,并试图获得有用的信息,以供未来的研究使用。我从局地震目录页面获得了研究所需的地震数据,并从获得了区域边界数据。

gis收藏家的博客 1570

C语言进阶教程(#运算符和##运算符)

本篇文章来介绍#运算符和##运算符的使用,这两个运算符大家应该是比较少见到,那么这篇文章将带大家来使用一下#运算符和##运算符。在C语言中,# 运算符和 ## 运算符是用于宏定义和宏展开的特殊运算符。在宏定义中,# 运算符用于将宏参数转换为字符串字面量。它可以将宏参数替换为字符串,并在编译时进行字符串拼接操作。// 输出 "Hello"// 输出 "Hello"// 输出 "Hello"在上述示例中,#x 将宏参数 x 转换为字符串。

m0_49476241的博客 2823

零基础DSP实战TMS320F28035:第九节,ADC比较器&EPWM

ADC比较器框图如下所示:-电压-----------------------------输出-电压A>电压B------------------ 1-电压A

sinat_30943509的博客 2536

支付域——账户系统设计

本文详细介绍了支付域中的账户系统设计,包括账户的定义、核心特征、常见类型以及在支付系统中的作用。账户是支付平台为用户、商户等主体建立的资金记录单元,具有资金归属、余额管理、交易流水、资金安全等核心特征。常见账户类型包括用户账户、商户账户、平台账户、保证金账户等。此外,还探讨了账户与银行账户的区别、账户的结构设计、如何设计账户类型以及账户系统设计等内容。

庄小焱 1191

# 和 ## 运算符

# 和 ## 运算符

weixin_42136255的博客 9908

【DNN实现二分类模型推理部署(C#)----20240712】

【DNN实现二分类模型推理部署(C#)----20240712】

weixin_44119674的博客 212

第20节 #和##运算符使用解析

  -------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.   第一: # 运算符 # 运算符用于在预编译期将宏参数转换为字符串 #include &lt;stdio.h&gt; #define CONVERS(x) #x int main() { printf("%s\n", CONVER...

一名从事物联网开发者的博客 219

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c20-#和##运算符使用解析

#运算符用于在预编译期将宏参数转换为字符串 #include <stdio.h> #define CONVERS(x) #x int main() { printf("%s\n", CONVERS(Hello world!)); printf("%s\n", CONVERS(100)); printf("%s\n", CONVERS(while...

z_cqupt的博客 252

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

# 和 ## 运算符 使用解析

# 和 ## 运算符 使用解析

ZhY_Rening的博客 530

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

20. #和##运算符使用解析

【代码】20. #和##运算符使用解析。

qq_52137184的博客 281

【C深入】#和##运算符使用解析

#include &lt;stdio.h&gt; #define CONVERS(x) #x int main() { printf("%s\n", CONVERS(Hello world!)); printf("%s\n", CONVERS(100)); printf("%s\n", CONVERS(while)); printf("%s\n", C...

zjy900507的博客 296

专题3-6.#和##运算符使用解析(国嵌C语言视频)

1. #运算符用于在预编译期将宏参数转换为字符串 #include #define CONVERS(x) #x int main() { printf("%s\n", CONVERS(Hello world!)); printf("%s\n", CONVERS(100)); printf("%s\n", CONVERS(while)); p

蜗牛的专栏 665

#和##的用法

#和##在C语言中宏定义使用很多,简单写下#和##的用法 “#”运算符 运算符#的名字是Stringizing Operator,它将函数宏的实际参数转换为对应的字符串常量。 ”#“的功能是对参数执行字符串化,如果没有特殊情况,这就意味着直接用""将参数包裹起来做替换。 如果实际参数中包含在字符串中使用时需要转义的字符(比如"和),那么这些字符就会被转义。 被字符串化...

qq_20999867的博客 9958

C #和##用法

#:是一种运算符,只能出现在带参的宏的替换文本中,将跟在后面的参数装换成一个字符串常量。 #define PF_INT(i) printf(#i"=%d\n",i) void main() { int x=100; PF_INT(x); } 预处理后: printf("x""=%d\n",x); C语言常将相邻的字符串合并处理: printf("x=%d\n",x); #...

dragon_cdut的博客 4442

国嵌 c语言,专题3-6.#和##运算符使用解析(国嵌C语言视频)

1.#运算符用于在预编译期将宏参数转换为字符串#include #define CONVERS(x) #xint main(){printf("%s\n", CONVERS(Hello world!));printf("%s\n", CONVERS(100));printf("%s\n", CONVERS(while));printf("%s\n", CONVERS(return));retur...

weixin_36091268的博客 137

C++预处理器中的#和##运算符

在C/C++预处理中,##和STR(hello)"hello"##var1a##babab更详细的解释在C++预处理器中,##是标记粘贴运算符,主要作用是将两个标识符组合成新的标识符。

PythonWHN的博客 584

宏定义—— #、##运算符和可变参数

 在函数式宏定义中,#运算符用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格或Tab),例如:#define STR(s) # sSTR(hello world)用cpp命令预处理之后是"hello world",自动用"号把实参括起来成为一个字符串,并且实参中的连续多个空白字符被替换成一个空格。再比如:#define

chenglian_999的专栏 1631

C++ ## 和 #

#define   SUITEK_DECLARE_TEST(class_name, attributes) \    public: \       virtual SUITEK_CTestClassInfo* GetTestClassInfo() const; \       static SUITEK_CTest* TestFactory(); \       static void Crea...

wang13342322203的博客 4512
上一篇: #pragma预处理分析
下一篇: 指针基础
wuyadecs
博客等级 码龄15年 16粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值