#运算符用于在预编译时,将宏参数转换为字符串

eg.

#include <stdio.h>
#define CONVERT(f)(#f)

void helloworld()
{
printf("hi,tom welcome to you!");
}

int main()
{
printf("%s\n",CONVERT(hello world!));
printf("%s\n",CONVERT(100));
printf("%s\n",CONVERT(while));
printf("%s\n",CONVERT(return));
printf("%s\n",CONVERT(helloworld));
return 0;
}

输出:

printf("%s\n",CONVERT(helloworld)); 这句并没有执行函数里面的内容,没有输出:printf("hi,tom welcome to you!");

CONVERT宏只是输出了函数的名称。

##运算符则用于在预编译时,粘连两个符号

一般情况下,我们是这么定义结构体的:

#include <stdio.h>

typedef struct _student
{
int id;
char* name;
}student;

int main()
{
student s1;
s1.id=1;
s1.name="tth";
printf("id:%d\n",s1.id);
printf("name:%s\n",s1.name);

student *p1;
p1=&s1;
printf("p1-id:%d\n",p1->id);
printf("p1-name:%s\n",p1->name);

return 0;
}

当有了##运算符符后,我们可以这么定义结构体:

#include <stdio.h>
#define STUDENT(type)typedef struct _##type type;\
struct _##type
STUDENT(student)
{
int id;
char *name;
};

int main()
{
student s1;
s1.id=1;
s1.name="tth";

printf("id:%d",s1.id);
printf("name:%s",s1.name);
return 0;
}

输出:

c中关于#与##的简易使用的更多相关文章

  1. ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍

    如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者 ...

  2. js中的经典案例--简易万年历

    js中的经典案例--简易万年历 html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  3. 在.Net中实现自己的简易AOP

    RealProxy基本代理类 RealProxy类提供代理的基本功能.这个类中有一个GetTransparentProxy方法,此方法返回当前代理实例的透明代理.这是我们AOP实现的主要依赖. 新建一 ...

  4. 在.NET中使用反射实现简易插件机制

    本篇是我学习反射的一个应用小场景而做的学习笔记,主要是一个小的总结,并对各个步骤的记录,以便将来回顾. 一.基础框架-敏捷基础版本 这里假定我们要开发一个记事本,选择Windows Form技术开发, ...

  5. 用JS获取地址栏中的参数的简易方法

    这个方法用起来超级简单,传入参数即可直接获取地址栏中的参数 代码如下 function GetQueryString(name) { var reg = new RegExp("(^|&am ...

  6. 十四、EnterpriseFrameWork框架核心类库之简易ORM

    在写本章前先去网上找了一下关于ORM的相关资料,以为本章做准备,发现很多东西今天才了解,所以在这里也对ORM做不了太深入的分析,但还是浅谈一下EFW框架中的设计的简易ORM:文中有一点讲得很有道理,D ...

  7. vmware-workstation-11中centos-6.6安装

    排版比较乱,参见 https://www.zybuluo.com/Jpz/note/144303 VMware Workstation 11中CentOS 6.6安装 Linux开发环境配置 目录 V ...

  8. Android学习之路——简易版微信为例(一)

    这是“Android学习之路”系列文章的开篇,可能会让大家有些失望——这篇文章中我们不介绍简易版微信的实现(不过不是标题党哦,我会在后续博文中一步步实现这个应用程序的).这里主要是和广大园友们聊聊一个 ...

  9. Zabbix实战-简易教程系列

    一.基础篇(安装和接入) Zabbix实战-简易教程--总流程  Zabbix实战-简易教程--整体架构图 Zabbix实战-简易教程--DB安装和表分区 Zabbix实战-简易教程--Server端 ...

随机推荐

  1. C#界面设计疑问

    1.就是想做一个类似下面界面的窗体,上面一排按键,点击一个下面对应改变一次界面的内容,这是如何实现的呢 ...是不是通过,比如这里有四个按键,然后使用4个大小相同的面板,每个面板内容不同.按一个按键, ...

  2. HTML中元素水平居中。

    一丶margin:0 auto; 试用最多的方法,简单实用. 二丶vertical-align:middle; 只适用于内嵌元素,比如说一个div中有一个图片和文字,要让图片和文字中线对齐. < ...

  3. javascript数组方法鉴赏一

    创建数组 如果你习惯了用 new 来实例化对象的形式,那么在js中一定会疑惑,可选的参数数量代表的意义截然不同. new Array(size);//传一个参数的时候分两种情况,size是正整数时代表 ...

  4. 搭建MHA环境【2】安装mysql-5.6 + mysql复制

    本例中mysql的安装方式选用了二进制包安装方案.mysql复制用半同步复制方案 [1]安装mysql-5.6.31 要在所有的数据节点上都安装上mysql,安装方式大致相同,所以我这里就不重复写多次 ...

  5. sql server高效分页控件及c#调用实例

    第一.首先在sqlserver中创建一个存储过程 USE [BZY] GO /****** 对象: StoredProcedure [dbo].[up_ProcCustomPage2005_New] ...

  6. CoreData概略

    CoreData概略 分类: IOS开发2013-10-25 16:19 178人阅读 评论(0) 收藏 举报 CoreData是IOS对数据进行对象化管理的一种高效方式,提供了对数据的增.删.查.改 ...

  7. 错误:指定的任务可执行文件位置 D:\Android\platform-tools\aapt.exe 无效

    android-apt-compiler: Cannot run program "D:\android-sdk\platform-tools\aapt 装上IntelliJ IDEA /下 ...

  8. jquery第六期:位置选择器

    <html> <head> <script type="text/javascript" src="jquery-1.10.1.js&quo ...

  9. telnet 不是内部或外部 命令

    win7->程序和功能->打开或关闭Windows功能->找到telnet安装下

  10. Javascript或jQuery方法产生任意随机整数

    方法1:javascritp方法 1 2 3 4 5 6 //随机数    function diu_Randomize(b,e){        if(!b && b!=0 || ! ...