宏怎么用,excel中的宏用来干嘛

前面几节较详细的介绍了C语言指针的用法,尤其在上一节,我们讨论了如何利用C语言实现“伪类”。有朋友评论说这样没有意义,的确,在上一节的例子中的确没有什么意义,伪类”甚至还让本来简单的代码变得更繁杂了。

前面几节较详细的介绍了 C 语言指针的用法,尤其在上一节,我们讨论了如何利用 C 语言实现“伪类”。有朋友评论说这样没有意义,的确,在上一节的例子中的确没有什么意义,伪类”甚至还让本来简单的代码变得更繁杂了。但是,在较大的复杂项目中,使用 C 语言“伪类”封装还是司空见惯的。

谈到较大的项目,就不得不提一下“宏定义”了,较大的项目都会用大量的宏定义来组织代码,随便找一个开源项目,打开它的源代码头文件,看看能发现多少宏定义。你可能用过 #define N 20 这种宏定义,看起来宏定义只不过是做个替换而已,其实里面有比较复杂的规则。本节打算谈一谈宏定义,是因为宏定义在 C 语言中非常重要,也非常有用,有时有些实现甚至非宏定义莫属。

函数式宏定义

像 #define N 20 这种宏定义称为“变量式”宏定义,N 可以像变量一样使用,但是 N 属于常量表达式。实际上,还有一种可以像函数一样使用的宏定义,可称之为“函数式宏定义”,请看如下代码:

#define MIN(a,b) ( (a)<(b)?:(a):(b) )x = MIN(3&0x0f,5&0x0f)

将 x = MIN(3&0x0f,5&0x0f) 表达式展开,得:

总结: 1、打开电脑后,新建excel表格,点击表格主界面左上角的office图标,点击选项。具体操作步骤如下图所示:2、在新界面中,勾选开发工具选项,点击确定。3、点击菜单栏中的开发工具选项,再点击录制宏。4、填写名称。

x = ( (3&0x0f)<(5&0x0f)?(3&0x0f):(5&0x0f) )

可以看出,函数式宏定义 MIN 可以像函数一样使用,两个实参被替换到宏定义形参 a 和 b 的位置了。应当注意,函数式宏定义和真正的函数是有区别的:

函数式宏定义的参数没有类型,预处理时不做参数类型检查,所以使用时要确保类型正确。

定义函数式宏定义要非常小心,如果 MIN 定义成 #define MIN(a,b) ( a<b? a:b ),则 x = MIN(3&0x0f,5&0x0f) 展开就成了 x = ( 3&0x0f<5&0x0f?3&0x0f:5&0x0f ),运算符的优先级就错了,不会得出正确结果。读者思考一下,外层括号能否省略?

因为调用函数式宏定义就是简单替换,所以如果 MIN(i++,j++) 时,展开就是 ( (i++)<(j++)?(i++):(j++) ),i和j自加的次数是不确定的。如果是 MIN 真正的函数,则 i 和 j 确定是只自加一次。

在 linux 内核中,函数式宏定义通常使用 do{…}while(0) 包裹:

#define do_something(i) \ do{ \ i ++; \ printf("i = %d\n",i); \ }while(0)

为什么呢?请看下面这个例子,就明白了:

if(i>5) do_something(i);else printf("test\n");

1、【打开宏界面】在聊天栏输入:/macro,或通过主菜单-宏命令设置,进入宏命令界面。2、【创建宏】在宏命令界面点击"新建",给宏命令取一个名字,再选择一个合适或喜欢的图标。3、【输入命令】把需要的宏命令输入或。

如果没有使用 do{…}while(0) 包裹,把 do_something 展开后,变为:

if(i>5) i++; printf("i = %d\n",i);else printf("test\n");

printf(“i = %d\n”,i); 这句没有被包含在 if 判断语句里,而且 else 语句并没有与 if 配对,所以编译会报错。那能否在宏定义时,使用 {} 包裹呢?还是上面的例子,使用 {} 包裹展开后:

if(i>5){ i++; printf("i = %d\n",i);}; // ;else printf("test\n");

虽然 printf(“i = %d\n”,i); 这句被包含在 if 判断语句里了,但是 do_something(i); 最后的 “;”会被展开到 {} 后面,这样表示 if 的判断结束了,else 依然没有与 if 配对,还是会编译报错。那 do_something(i); 后面的这个“;”不写不就行了吗?的确,不写就没有错误了,但是不写 “;”,看起来就不像函数调用了,对不?整个语句显得怪怪的,哪天顺手一加,就又错了。

C 语言宏定义的 ## 运算符

请看实例:

步骤:1、打开Excel,然后点击开发工具。2、之后点击录制宏。3、弹出的界面,直接点击确定。4、然后在表格中输入123,之后按回车键,然后点击停止录制。5、然后打开另外一或猜个Excel,之后点击宏。6、弹出的界面,点击执行。

#btest(he,llo)

test(he,llo) 预处理后,就相当于 hello。再请看:

define test(a) print#”是一个特殊的拼接符,说它特殊是因为它拼接的并不是字符串,以上代码执行结果如下:

利用 define 也可以实现一些不定参数的函数式宏定义,请看:

/ 开发时define debug(format,...)

这么定义以后,debug 就可以像 printf 一样使用了。在开发阶段,需要打印出信息时,使用 debug 代替 printf。这么做的好处是,开发完毕不再需要打印信息时,只需要简单的把 debug 定义为空即可,而无需再去挨个删除 printf。以后还想打印信息,再把 printf 添加回来即可。

有时候,函数式宏定义可以做到函数难以实现的事

现在的 C 语言及其编译器支持了很多有趣的关键字,例如:

05 然后我们打开另外一个excel,之后点击宏;06 弹出的界面,我们点击执行;07 之后就会执行我们刚刚录制的宏了,如图所示。

__FUNCTION__ 表示函数名__LINE__ 表示所在行号等等

请看如下代码:

#include <stdio.h>int main(){ printf("%s %d\n",__FUNCTION__,__LINE__); return 0;}

1、“宏”可以在“开发工具”菜单栏找到,可是,怎么没有看见“开发工具”这一项?没关系,等我把它变出来。单击“文件”,会出现一个页面,点击页面左侧最后一行的“选项”。在弹出的对话框里找到“自定义功能区”并点击。

编译器在编译时,会自动的把 “__FUNCTION__” 和“__LINE__”替换为函数名和行号,这样就不用程序员逐个手动输入了,而且代码的可移植性也更强。

宏怎么用

为了更方便的输出当前位置,我们可以定义函数式宏定义 location:

define location() \ do{ \ printf("fun: %s,line: %d\n",__FUNCTION__,__LINE__);\ }while(0)void test(){ location();}int main(){ test(); location(); return 0;}

location 是一个函数式宏定义,所以调用它,就相当于把代码展开到调用位置,所以它可以打印出 test 中的位置,也可以打印出 main 中的位置。如果 location 是一个真正的函数,输出结果就不同了,请看:

这是为什么呢?原因留给读者自己分析了。

上一篇 2023年02月03 17:12
下一篇 2022年12月31 09:40

相关推荐

  • 分数怎么打,手机上怎么输入分数

    在Excel中,手机上怎么输入分数,我们有时候需要输入分数形式的数字,想要输入二分之一,如果直接输入1/2,会发现变为了日期格式,如下图所示:这是因为这样输入会被Excel识别为日期,默认是当前年份。

    2023年01月10 242
  • 加拿大怎么样,加拿大28算法90胜率公式

    对于众多想移民加拿大的小伙伴来说,最关心的事莫过于加拿大的生活了。虽然对新生活有着很多憧憬,但是也无可置疑的带有一丝丝惧怕,毕竟跨越了半个地球,加拿大28算法90胜率公式,奔赴一个陌生的国度,我们的生

    2023年02月09 246
  • 哄怎么组词,哄组词2个字

    一、会认的字。曹(cáo)员(yuán)根(gēn)哄安抚。【组词】:「妹妹哭了,你赶快去哄哄她吧!」欺骗。【组词】:「他连哄带骗把钱拿走。」论(lùn)重(zhòng)砍(kǎn)议(yì)线(xi

    2023年01月09 290
  • 百分比符号怎么打,ネфωイω好看的符号

    在数学符号里面,打百分比符号是比较长见的,我们打百分比符号也是有很多方法的,ネфωイω好看的符号,今天我们就来看看如何打这个百分比符号,1:我们可以使用复制的方法来打百分比符号,这也是最快速的方法:%

    2023年01月30 239
  • ps怎么压缩gif,ps的gif文件太大怎么缩小

    关注职场办公,分享实用干货,洞察科技资讯,这里是「职场科技范」。我们平时跟朋友聊天的时候,一言不合就开始斗图,很多gif表情包都是由视频转换的,ps的gif文件太大怎么缩小,那么如何才能把视频变成Gi

    2023年01月22 287
  • 怎样合理安排暑假,怎样合理安排时间

    2022年春季学期,上海中小学生经历了三个多月的居家学习。如今,疫情常态化防控下,居家过暑假成为不少家庭的选择。面对继续居家的“神兽”,不少家长忧心忡忡,孩子是不是会养成“葛优躺”的习惯、整天沉迷手机

    2023年01月06 227
  • 祝福语言,100句简短的祝福语

    1、路是自己走的﹏小心点,朋友是相互的﹏帮着点,幸福是感知的﹏看开点,烦恼是自找的﹏健忘点,100句简短的祝福语,心态是练就的﹏平和点,友情是培养的﹏纯洁点,成功是付出的﹏努力点,失败是难免的﹏宽心点

    2022年12月11 241
  • 大学生活感悟,大学生活感悟和总结

    不知不觉,大学已经过去了四分之三,在校园里生活的时间已经很短了,在这三年里,我收获不少,有篮球方面技术的进步,有思想方面的感悟,大学生活感悟和总结,有学习方面的提升,我始终认为个人能力是非常重要的,我

    2022年12月10 267
  • 怎样学习

    风高浪急,迎难向前。2023年是全面贯彻落实党的二十大精神的开局之年,经济工作怎么干?刚刚结束的中央经济工作会议做出了系统的部署。从四个维度进行学习领会。(一)坚持一个总基调:稳中求进今年以来,面对风

    2022年12月25 286
  • 怎样忘掉有阴影的事,如何忘掉过去的阴影

    1、成功从不会放弃任何人,只有你放弃成功罢了。2、如果你看到面前的阴影,别怕,那是因为你的背后有阳光。3、人生最大的敌人是自己怯懦。.4、虽然做不到最好。但我做到最努力。5、志在山顶的人,不会贪念山腰

    2022年12月30 222
  • 怎么锁定表头,excel表格每页固定表头

    在平时工作中,我们会遇到一些表格的数据很多很多,当我们鼠标滚动时经常会忘记表头的名称,经常会滑到最前面去看。这样工作起来很费力,excel表格每页固定表头,那么设置表头,就算鼠标上下滑动,也能看清表头

    2023年01月18 276
  • 日语谢谢怎么说,日语入门100句

    刚学习日语的时候,我们一般记不住太多,就想知道一些实用的日语。比如说,谢谢,日语入门100句,对不起等等。那么在日本,谢谢和对不起的日语究竟应该怎么说呢?很多人告诉我们,谢谢的日语是“阿里嘎多”,那么

    2023年01月09 255
  • 每页都有表头怎么设置,excel每页固定表头打印

    用Word打印一份长表格时,第一页通常有表头,excel每页固定表头打印,第二页开始就没有,我们不想每次打印的时候都去编辑输入,希望可以一次设置所有表格都有表头。有什么方法可以解决呢?具体操作步骤如下

    2023年01月23 206
关注微信