C:宏定义的一些格式(怕忘记)
现在还没怎么用到宏定义,但以后肯定会经常用的,写下这盘,以后忘记了可以温故。首先宏定义必须写在函数之外,其作用域从宏定义命令起到源程序结束,也就是说一但定义系统就会分配内存,想让它结束用“#undef“命令,格式如下:#define 标识符 字符串,记住不能加封号,假如宏名在源程序中用双引号括起来,则已成为字符串中的字符,预处理程序不对其进行宏替换,例子:
#include "stdio.h"
#define OK 100
void main()
{
printf("OK");
}
其结果还是为:OK。宏定义还允许嵌套,比如:#define p 1314 #define q p*p,用宏定义可以简单化你的代码,至少打的字少很多,假如我们要输出五个数并且要换行,是不是要打五个%d和\n,现在用宏定义试一下:
#include "stdio.h"
#define x "%d
#define y \n
#define x1 %d
#define y1 \n"
void main()
{
int a=,b=,c=,d=;
printf(x y x1 y x1 y x1 y1,a,b,c,d);
}
从代码可以看出x y x1 y x1 y x1 y1=="%d\n%d\n%d\n%d\n",但是结果是不能运行的,这说明我们不能一一代入,还是要尊重下宏定义的规则,例如这样:
#include "stdio.h"
#define x "%d"
#define y "\n"
void main()
{
int a=,b=,c=,d=;
printf(x y x y x y x y,a,b,c,d);
}
这样就可以运行。宏定义还可以定义一些简单的函数,格式如下:#define 宏名(形参表) 字符串,来做个比较容易混淆的例子:
#include "stdio.h"
#define SQ(y) y*y
main()
{
int a,b;
scanf("%d",&a);
b=SQ(a+);
printf("%d",b);
}
运行结果:aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAm8AAACBCAIAAAAZhcoEAAALwklEQVR4nO3dWZbaxh7H8VpGFsCDt8Izp5fBAnjODvqdDfRrbhzHSfDQ7Z7dg3tyj/RgO7aTe7fAfRBINVPSHwSY7+fo+IAQpVJJqh8qQVudfflfNp1+/u/Jp39PPv178vTPh8fvx4/fjh6+Ht5/Pbj7sn/zaffqYfP8bv3k6vXhxauDs7/2T/7YPX65c/T79uGLrYMXm+9/e7f/fGPv+cberxu7TExMTExMSzWpPEpP8yh9+n78+P3o4dvR/dfD/t/vbz/vXj1uXdytn1z99PMFExMTExMTkzWZaapF6WEWpXef92+edi7v353evD68+OnniwEAADCpYZS6adr/++Duy/7tp73rp+2P/fWTq977U9IUAACXsu+YPrkXpg+b57dvjy//3PtAmgIA4NLSdHhh+s28MH3cubx/d3bz+uji5c4RaQoAgMuXpqMvH+3fPO1dP25/7G+cXL86OPt9+1BP02ZDZVPbnJqjf/Wp0VAz3EgAAKbKTtNsmDe/Y7p79bh1Mbxp+mLrwErT1aZnamsP8sdN0hQA8ONS2VeQsjR1vn/0uHP5sHl+9/bD5V/7J79tvnfTdDBQg8FKu61W2yurbf/T7PJ0hhsJqV7nWavbn3UtpqzXedbpzboSMv1uy9mGfre1BDsPmLkiTfWbpu9vP+/dPO1ePWx/vN88u31z/PHPvQ/PN/a8adpsqMFgpd1Ug4FSSrWbo6fXwzHeQJr2u61nGqcjM163uoNex3lbMctdvIq8PLssq95O1XudpPVr9Z3/PnzyaZpvvr7x3jZPnymvknxPmEdH3Sk28TRNbGdjq+f/cA6osUcKFWV3Hr3OIjfoTOxHTXXVyrppeji6aTpK0/6705s3Rxd/7B7/urHrTVOl1GCw0miowWAlT1M9VtvhNC2OE+uwsY6qfrdVvNrrFI/73dbwod7h60tUovVA8bKc7is7Tcb0Xs7Gzvu1w4TT1Nhro4bwtnn6TLmJpenser/Jrj29nfvd1uj4WOBL4bp6pFhRxosL3JazE4nMGaRp9qcEs2HerYv+xun168PzlztH/1nfiaRpdoXabKimlqbDmSohTY0ZvnM3n6edudbr+Wxpp2K8P1aY3QH3u61WtzsmeiaZADWZ3khvXrK3zdNnTqYqpGmosHjJxjm5sLcF6umRokXpT8jSSuYlTYuvIBVperd+cvXq4Ozl9uEvb7d9abqSXZhm3znSnw4fK9VITNN8jv90zOf600h7k1WyPuKiXQdFjm6zXw32DvYLw/WO6U2CL2dvd4aM9K0J9GnauFFx9eYpymwNa4ApMrN4YdJneNEY3jZPn+kpOK94z6i0sUp94/RyPQ3iNLJX6KjudYw2tArqdYbVHM0crT++jwL7XXut09PmRY4Kn8SzYFiy28DOhvvORHPT9I+ik2i3codrLT3SmKLy9mi1yNJK5jRNtz/eb51rafrGk6bt9vDO6GpbrbZVu6kaDdVoDB83tR/MOKsue+xaH+/s3iBwl8IcVdEO+6JrdtblprHvsLbrr59bldPUM3o0Nk09MwNF+T8uh2b6Rp8mlaZ9rQf0bURWp/SZZunOrWttoVFGuLe38/TwNUjqVZ97Q8zcF4N+t+MO/2mZkR3HdjgmVkk7gzw9eeioCG9JhTQtjhBrw0NnojVMaiShtN2mm6aVeqSxReXvJUsrmWWaKqWMNLW+gnR+u/7hMvux6S9vtqw0fd5Uq23Vbg+jNHusPx3OLJGmo4sE/wHnXAnaH1NHL+fnW+DyMV/If8ymfCoPdzaya1Pn6fhrU3dDAkWZV5vD94RmWl+GmM65XfQaE7w2jc3SwtSzTJ6zToNEjhZDuEe2ZhlXWXptfI9Tq9Tvtp51OmZM2temsYp528OtlnerndxwbkN6z8TgkTaJditnJj2Sr6he51mr01m0a1MVVVs1FjVNi1/INIcXo/nT7PHwi0iJaWoOwUVvLXjmOmMl3tNAP2qjaVrMDiaY9k7jisTuVeJvNepWLU31OhSXBf40ddecMnNqaRrYU94KR2dGKj9azriujadpcGP1Rg4uEEtT++orOU2TqpSVbo4RStJ03FmgFeXWb2ya+jYtlKbV2q2cWnqk8UWNlpz0XZUlMU8jveXTtPiFzHXxC5nm6Bcyqd9CMoc29HMnf17cEPKdo/5Pgu74knkFGThiffc5jEVjp+vYU9neuuF3evWN1J5o6zWW0Irr2mEbKMo+axNnavWdyBmu7UFr4+w2LzFTp1e+183f1Op0zM9S5jL6SK/TIJ5GDm1bNE21Cpv7JZ4KiVXSP4Fp54s+0us5KhK2ZcwxnZCmwTMxNtIrbTfJSO+0eqRoUe4T8rSkxU7T7GtHTeOHMaqhhnMaDRVJ09iVnPG6b0RFG/EZ2INh9j0Ia752pgR6lWIdvkM72qNGB6silcqH6exNyOvS6nS8BfbsNwWLcgfLgjOLQrXvhkzo/Pau0NPmpWb6VxDqHt1ltJFNX/3sRvbv3LEjvUXR2t5MuMZKqZKxrt7wRqJ1beo9KkL8Z4F3q8em6cB70FtN4nwLSdZu5dO0MMUeKVhUz/55acJnHpgWNk1HvzF1fyGTPW3Erk2XQK/Uby7GjbyVMMGifhwTHq4ut3PnwSSOimlv9RTvKWApzPKvN4jvmxY/iWmOnjZHv5AZZuqypqkxApS0OGk6NZNukpI7dx5MoAmmsNV6kfbwAbBApGma/b8xDaXaDbVq/jcy+YOlTdOSSNNpGQ16zroeMzavR4U27EmUYnGJ0jR94n9kAwD8wKrfNwUAABnSFAAAKdIUAAAp0hQAACnSFAAAqdJpGv/TxgAALCPSFAAAqQppumaa9RYAADBrZdPUSlACFQAA6UgvaQoAAGkKAIBYtTTlvikAAAWuTQEAkCJNAQCQIk0BAJDiFzIAAEjx1xsAAJDiLwsCACBFmgIAIEWaAgAgRZoCACBFmgIAIEWaAgAgVe33pvxIBgAAA3+9AQAAKf6yIAAAIvydXgAApCRpSpQCAKCUIE2JUgAAChXSlCgFAMBAmgIAIEWaAgAgUu2+KWkKAECBvywIAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpWo81x6xrNF21bea8tWSoPsuw04GlRprWRu9Pl6FvrWEb560ZI/WZt6oCmDDStDak6SKuopR5qw+A+pCmtfGmqfVA74tDI8Nl58fr4y3ErU9osbLbG6pn2fLXHKGXxjVDufaMt09ovaHCQ+VE2iR9uwDUijStzdheW/lSVl+mwvz0inmfSsr3vney9XcXK1tOhfqkbE7Zqo5tK8n+BVAH0rQ2oR4w0qta0stJr49VeLw+pdYVKdxddbW0cBcrW05iY4baP3118ap628F9HNplAGaPNK1NYscdX1h/NfSusjmUkhwV0s7b71dIr8StqFZOhfokNl2pqnrbObIiAHOHNK1NYscdX7hygZFlppqm8XWFCiRN4ysCMHdI09pI0nRsqklSJCU5KqRdqXIqlO99u6QdEstJaTp3vfE53jcm7iMAc4E0rceaJmW+9ZLbk6bPH1slldaJrzkSC4+XE6p/yia4K5K0Q2I5oe0K1UcF9vLY9gnNT28cAPUhTVHBtDt0AgPAgiFNURZROj/WAmZdL2D5kKZIMe3OmjCohjQF5gVpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIAUaQoAgBRpCgCAFGkKAIDQ/wFtWicQtT0bSAAAAABJRU5ErkJggg==" alt="" />,一开始我以为是16,但是其运行过程是:a+1*a+1;因为上面宏定义是y*y,当我们把y*y改成(y)*(y),其结果是:aaarticlea/png;base64,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" alt="" />
其中运行过程是:(3+1)*(3+1)=16.
C:宏定义的一些格式(怕忘记)的更多相关文章
- C语言中的宏定义
目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...
- iOS 日常工作之常用宏定义大全
转自:http://www.jianshu.com/p/213b3b96cafe 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了 ...
- VC中预处理指令与宏定义详解
刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个 ...
- iOS日常工作之常用宏定义大全
前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了怎么办?本人在工作中也是如此.所以在这里给大家分享一些常用的宏定义,喜欢的小伙伴可 ...
- c语言宏定义#define的理解与资料整理
1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...
- C 宏定义
C/C++中宏使用总结 .C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释 ...
- linux C宏定义 转
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_H ...
- c语言宏定义#define
1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...
- [转]c语言宏定义#define的理解与资料整理
原文地址:http://www.cnblogs.com/haore147/p/3646934.html 1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也 ...
随机推荐
- Science发表的超赞聚类算法
作者(Alex Rodriguez, Alessandro Laio)提出了一种很简洁优美的聚类算法, 可以识别各种形状的类簇, 并且其超参数很容易确定. 算法思想 该算法的假设是类簇的中心由一些局部 ...
- PHP+Redis 实例【一】点赞 + 热度 上篇
这次的开篇,算是总结下这段时间来的积累吧,废话不多说,直接干! 前言 点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql(写了几百行的代码都还没写完,有毒)啦 数据库直接 ...
- tnsping非常慢
最近给同事虚拟机上安装了一个11g数据库,发现一个奇怪的问题,用windows客户段连接时候非常慢,慢到不能容忍的地步,但是本地os验证登录没有问题,速度非常快,初步定为问题出在监听上,于是我tnsp ...
- 前端页面适配的rem换算
为什么要使用rem 之前有些适配做法,是通过js动态计算viewport的缩放值(initial-scale). 例如以屏幕320像素为基准,设置1,那屏幕375像素就是375/320=1.18以此类 ...
- jq,返回上一页,小记history.back(-1)和history.go(-1)区别
<input type="button" name="back" value="重新填写" onclick="javascr ...
- CDH集群搭建部署
1. 硬件准备 使用了五台机器,其中两台8c16g,三台4c8g.一台4c8g用于搭建cmServer和NFS服务端,另外4台作为cloudera-manager agent部署CDH集群. ...
- web前端素材整理汇总
最近一直搞前端开发,整理下前端用的一些常用素材,分享给大家 框架类 Vue:https://cn.vuejs.org/ iview:https://www.iviewui.com/ 插件类 Jquer ...
- javascript设计模式——组合模式
前面的话 在程序设计中,有一些和“事物是由相似的子事物构成”类似的思想.组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的.本文将详细介绍组合模式 宏命令 宏 ...
- Dubbo源码学习--服务发布(DubboProtocol、Exporter)
在Dubbo服务发布的整体流程一文中,只是分析了服务发布的整体流程,具体的细节还没有进一步分析.本节将继续分析服务暴露的过程.在ServiceConfig中通过一句话即可暴露服务,如下: Export ...
- Scala入门系列(十一):模式匹配
引言 模式匹配是Scala中非常有特色,非常强大的一种功能. 类似于Java中的switch case语法,但是模式匹配的功能要比它强大得多,switch只能对值进行匹配,但是Scala的模式匹配除了 ...