前两天上课,被JAVA老师问懵了,老师问:“你们学C语言,有没有写过带参的宏玩一玩”,说实话,我根本没听过什么带参的宏,我只用过宏定义,所以我下来一定要找个时间把这“带参的宏搞懂”,于是就有了这篇文章 无参数的宏没什么好说的,但还是有些地方使用时要注意。 几点注意: 1. 在宏定义的#之前可以有若干个空格、制表符,但不允许有其它字符。 我这里为什么a和b要加括号? 宏进行定义时不会考虑参数的类型。 3. 参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。 4. ,INT_MAX和A都不会在被展开,解决这个问题的方法很简单,多加一层转换宏,加这层宏的用意是把所有宏的参数在中间曾全部展开。
比如: 你可以将一个宏扩展为与C语法格格不入的内容, 但该内容与后面的语句结合在一个若能生成合法的C语句, 也是可以正确编译的. 注意, name之后的左括号(必须紧跟name, 之间不能有空格, 否则这就定义了一个对象宏, 它将被替换为 以(开始的字符串. 但在调用函数宏时, name与(之间可以有空格. e.g. #define mul(x,y) ((x)*(y)) 注意, 函数宏之后的参数要用括号括起来, 看看这个例子: e.g. 那么, 如果原先tmp.c中含有MAX宏的定义, 那么再在gcc调用命令中使用-DMAX, 会出现什么情况呢? ---若-DMAX=1, 则正确编译. #define PRAGMA_DEP #pragma GCC dependency "temp-file" 由于预处理之进行一次宏扩展, 采用上面的方法会在编译时引发错误, 要将#pragma语句定义成一个宏扩展
Vite学习指南,基于腾讯云Webify部署项目。
) 上述代码无论是操作 .xlsx 文件还是操作 .xls 文件都不会报错,但是另存为的 .xlsx 格式的文件会打不开,同时你会发现正常存储的 .xls 文件打开后格式全都没了,怎么办,改个参数试试, ,但是当加入一个计算公式后,另存为一个文件时明显文件尺寸变小了,但是数据和公式没有发现有问题。 格式,但是 openpyxl 使用来操作 .xlsx 文件的,存储时会导致宏丢失,强行存储为 .xlsm 格式会导致最终的文件打不开。 xlsm 可以读取,但没有样式和宏 可以读取,但没有宏 可以读取包含宏的表格 保存.xlsm 保存后打不开,存成 .xls 格式宏丢失 保存后打不开,存成 .xls想 格式宏丢失 存储后宏还在 增删行和列 ,那么就放弃旧的格式的吧 还有一个神奇的情况,一个带有少量数据的 .xlsx 格式的表格要比一个空表格还要小,这是什么情况,暂时没弄明白怎么回事,求知道的大神告知一二
当前几乎所有的集成开发环境(IDE)和代码编辑器都支持配置将Tab键自动扩展为4空格输入,请配置你的代码编辑器支持使用空格进行缩进。 每级嵌套都会增加阅读代码时的脑力消耗,因为需要在脑子里维护一个“栈”(比如,进入条件语句、进入循环等等)。 应该做进一步的功能分解,从而避免使代码的阅读者一次记住太多的上下文。 宏在预编译阶段展开后,在其后编译、链接和调试时都不可见;而且包含多行的宏会展开为一行。函数式宏难以调试、难以打断点,不利于定位问题。 对于包含大量语句的宏,在每个调用点都要展开。 但是,函数相比宏,最大的劣势是执行效率不高(增加函数调用的开销和编译器优化的难度)。 为此,C99标准引入了内联函数(gcc在标准之前就引入了内联函数)。 内联函数跟宏类似,也是在调用点展开。 数字 0 有时候也是魔鬼数字,比如 status = 0; 并不能表达是什么状态。
就过往从事股权投资的经验而言,陈俊宏强调,不敢为不熟悉的团队提供服务,原因太多空气项目想靠代币发行圈钱,需要一定时间的接触来确定团队和项目的靠谱程度,一旦项目发了币就需要持续多年用心经营这个项目来使代币增值回报投资者 与好的项目合作,对双方才会有相互加持的效应。 2 为什么如此看好MT?MT还会涨吗? 陈俊宏清晰明确的给出了自己的观点: “ • 流动性是基础:一切可以给区块链行业带来流动性的靠谱产品,都会高速的发展。 3 这次运作MyToken项目有什么心得? 但是就此疑问,陈表示,至少目前为止两个项目并非出自同一个团队。不过,他也说明,棱镜不会放弃与任何一个有潜力的、快速成长的团队深度合作的机会。、
在大数据时代,GDP等一系列传统的经济指标,真的已经“过时”了吗? 1、传统数据“漏掉”了什么? 此后,“被增长”一词开始用于个人体验与宏观经济数据不符的现象。为什么会出现不符呢?专家解释称,由于地区等结构性差异因素,很可能导致一些未被计入的情况。同时,平均数据也往往会忽略微观层面的个人。 作为发达国家的GDP增速并不如一些发展中国家高,但我们发现这些国家间经济发展的质量差距却在拉大。 假如一座钢厂形成污染,其清理污染的费用会增加GDP,受到污染伤害的工人或居民的医疗费用也会增加GDP。 英国财政部前顾问戴安娜·科伊尔在其2月份发表的文章《超越GDP——经济绩效的衡量方法缺失了什么》一文中指出,国民核算等官方经济数据有各种来源,但有关个人和企业的调查构成其骨干。 赵彦云认为,在大数据时代,政府可以在国家层面建立数据集中平台,统筹管理经济社会的各项数据,包括经济社会统计数据的空间化,覆盖社会生活的方方面面,可以基于服务业各个部门管理的行政记录、业务统计、监管信息,
在大数据时代,GDP等一系列传统的经济指标,真的已经“过时”了吗? 1、传统数据“漏掉”了什么? 此后,“被增长”一词开始用于个人体验与宏观经济数据不符的现象。为什么会出现不符呢?专家解释称,由于地区等结构性差异因素,很可能导致一些未被计入的情况。同时,平均数据也往往会忽略微观层面的个人。 作为发达国家的GDP增速并不如一些发展中国家高,但我们发现这些国家间经济发展的质量差距却在拉大。 假如一座钢厂形成污染,其清理污染的费用会增加GDP,受到污染伤害的工人或居民的医疗费用也会增加GDP。 英国财政部前顾问戴安娜·科伊尔在其2月份发表的文章《超越GDP——经济绩效的衡量方法缺失了什么》一文中指出,国民核算等官方经济数据有各种来源,但有关个人和企业的调查构成其骨干。 赵彦云认为,在大数据时代,政府可以在国家层面建立数据集中平台,统筹管理经济社会的各项数据,包括经济社会统计数据的空间化,覆盖社会生活的方方面面,可以基于服务业各个部门管理的行政记录、业务统计、监管信息,
大家好,距离上一次更新已经过去一个多月了。前段时间是秋招时期,所以本人也是在忙着找工作、笔试、面试什么的,所幸有之前学习的内容做支撑,还算比较顺利找到了一份软件开发的工作。 为什么要引入内联函数呢?主要是为了消除函数调用时的系统开销,以提高运行速度。 既然宏定义和内敛函数都可以完成替换,为什么还要引入内联函数呢?因为使用宏定义有时会产生意想不到的错误,这也是笔试题中经常考的地方。 什么错误呢?来看下面的例子,只是在上面的例子上多乘一个2. 所以,使用宏定义要格外小心,通常都会要求我们在后面加上括号,这样就不会出错了。 2、在inline函数里一般不能含有复杂的控制语句,如for、switch等 3、inline函数是一种用空间换时间的措施,函数体不宜太长,否则反而会增大系统开销,一般为1~5条语句。
在编程领域里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器在遇到宏时会自动进行这一模式替换。 绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。 在RAC框架中,其宏定义的功能强大能帮助开发者更加快速、便捷地进行开发工作。 metamacro_argcount(...)宏展开后变为: //宏里的可变参数个数为22个 metamacro_at(20, self, str, 20, 19, 18, 17, 16, 15, 14 rac_weakify_(0, __weak, self) \ rac_weakify_(1, __weak, str) 此时,得到了一个rac_weakify_(...)宏,那么来看下这个宏什么作用 为什么要在这里加一个@符号? Objective-C源于C语言,输入字符串时,C语言用""来表示,而Objective-C是用@""来表示。
缩进,这是不成文规矩,我再重提一下吧,一个缩进一般是一个TAB键或是4个空格。(最好用4个空格) ii) 空格。空格能给程序代来什么损失吗?没有,有效的利用空格可以让你的程序读进来更加赏心悦目。 这个动作术语叫“宏的展开” 使用宏是比较“危险”的,因为你不知道宏展开后会是什么一个样子。例如下面这个宏: #define MAX(a, b) a>b? a:b 当我们这样使用宏时,没有什么问题: MAX( num1, num2 ); 因为宏展开后变成 num1>num2?num1:num2;。 而且虽然,宏的执行很快(因为没有函数调用的开销),但宏会让源代码澎涨,使目标文件尺寸变大,(如:一个50行的宏,程序中有1000个地方用到,宏展开后会很不得了),相反不能让程序执行得更快(因为执行文件变大 所以声明成宏,即可以免去全局变量的开销,也会有速度上的优势。 27、不要为宏定义加分号 有许多程序员不知道在宏定义时是否要加分号,有时,他们以为宏是一条语句,应该要加分号,这就错了。
这并不是说今天销售额环比增幅和减幅了多少,这么细节的数据问题本质的东西应该立于一些宏观的战略局面,比如不断变化的市场竞争格局,整个商业链条是否通畅等等,所以企业分析应该首要立于战略层面,有宏观有微观,有高度有深度 变现核心点是随着商业定位和经营模式出来的,而大家应该非常好理解这个点,就不展开细述。 接下来讲讲宏观层面的市场竞争格局,说白点就是有多少竞品,自身占据了多少市场份额。 第二步:微观层面分析 了解宏观基本面,那么你会对整个企业的盈利空间、战略方向以及未来发展有一个比较客观的判断,这还远远不够,因为那是飘在空中的东西,而地上的东西是将在空中的雪花一片一片铺在地上,这样才能保证整个生意的完整 那么微观层面会有哪些呢,有一些很基本的是做什么样的产品,比如做护肤品,护肤品里有针对敏感肌和非敏感肌的,非敏感肌里再分是要以主打抗衰老为主,还是保湿为主等等的产品线,也就是宏观的产品定位知道我们要干嘛, 用户增长事关企业生死,这个数据应该越细越好。就算你作为一名底层的员工,你也能从用户增长能力来判断整个企业目前所处的发展状态,这应该是一项基本分析。
我们看到,在模拟微内核的代码中,用多线程执行并行访问共享数据curr时,开销不会随着线程数量的变化而变化,而模拟宏内核的代码中,总时间随着线程数的增加而线性增加,显然,这部分开销是自旋锁的开销。 当今流行的CPU cache结构已经排队自旋锁的开销符合这种线性增长。 那么为什么微内核的模拟代码中的锁开销没有随着线程数量的增加而增加呢? 可见,随着CPU数量的增加,模拟宏内核的代码锁开销大致在线性增加,而模拟微内核的代码,锁开销虽然也有所增加,但显然并不明显。 为什么会这样?请看下面宏内核和微内核的对比图,先看宏内核: ? 共享资源的多线程访问就应该严格串行化,并发争锁是一种最无序的方式,而最有效的方式则是统一仲裁调度。 在我们日常生活中,我们显然能看到和理解为什么排队上车比拥挤着上车更加高效。 摘录一段王垠聊微内核时的一段话: 跟有些人聊操作系统是件闹心的事,因为我往往会抛弃一些术语和概念,从零开始讨论。我试图从“计算本质”的出发点来理解这类事物,理解它们的起因,发展,现状和可能的改进。
在定义带参数的宏时,宏名标识符与左圆括号之间不允许有空白符,应紧接在一起,否则变成了无参数的宏定义。 并且,字符序列与其每一个参数必须用括号扩起来,否则该宏定义可能会产生二义性 。 a : b); } 很显然,我们不会选择用函数来完成这个任务,原因有两个: (1)首先,函数调用会带来额外的开销,它需要开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈。 这种开销不仅会降低代码效率,而且代码量也会大大增加,而使用宏定义则在代码规模和速度方面都比函数更胜一筹; (2)其次,函数的参数必须被声明为一种特定的类型,所以它只能在类型合适的表达式上使用,我们如果要比较两个浮点型的大小 除此之外,宏与函数的不同点还有:宏是在预处理阶段展开,占用的是编译时间,函数实在程序运行时调用的,占用的是程序运行的时间;宏参数没有类型说明,也没有返回值的概念。 和使用函数相比,使用宏的不利之处在于每次使用宏时,一份宏定义代码的拷贝都会插入到程序中。除非宏非常短,否则使用宏会大幅度增加程序的长度。 还有一些任务根本无法用函数实现,但是用宏定义却很好实现。
反观李彦宏,一件货都没带,开播10分钟,参与人数突破100万;截止目前,参与人数已经突破了1000万人,均高于同期的董明珠和罗永浩。 为什么董明珠直播带货能创新高? image.png 在场景布置上,有定制的背景板、商品展台、灯光设计等,不仅营造商品购物的氛围,还能够凸显格力的品牌文化。 据新浪科技统计,董明珠与王自如直播期间,两个多小时后观看人数为643万人。 而董明珠对直播带货的态度也不断转变,从一开始的“格力不做直播带货”,到要“坚持线下,带动就业”,再到“直播,但不为卖货”,再到“未来,格力直播可能会常态化。” 这也是为什么当下企业都热衷于搭建自己私域流量池,这样能够为自己的直播带来更多曝光。 同时,李彦宏就是一个顶流IP,学霸企业家人设,天然契合本次直播的主题。 加上李彦宏的学霸和企业家身份,直播现场俨然变身弹幕网友大型高考、创业咨询现场,网友纷纷提问互动。 有一条弹幕这么评价:“看这种知识大咖直播,只用学习不用花钱,真香!”
函数相对宏函数有如下优点: (1)内联函数同宏函数一样将在被调用处进行代码展开,省去了参数压栈、栈帧开辟与回收,结果返回等,从而提高程序运行速度。 (2)内联函数相比宏函数来说,在代码展开时,会做安全检查或自动类型转换(同普通函数),而宏定义则不会。 例如宏函数和内联函数: //宏函数 #define MAX(a,b) ((a)>(b)? inline函数带来的运行效率是典型的以空间换时间的做法。内联是以代码膨胀(复制)为代价,消除函数调用带来的开销。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。 内联展开是在编译时进行的,只有链接的时候源文件之间才有关系。所以内联要想跨源文件必须把实现写在头文件里。如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。 C++ 通过内联机制,既具备宏代码的效率,又增加了安全性,还可以自由操作类的数据成员,算是一个比较完美的解决方案。
, 而不是定义一个变量, 变量只有定义才会开辟存储空间 所以如果是局部变量, 虽然提前声明有某个局部变量, 但是局部变量只有执行到才会分配存储空间 #include <stdio.h> int main , 所以extern一般会省略 如果只有函数声明添加了static与extern, 而定义中没有添加static与extern, 那么无效 ---- ---- Qt Creator编译过程做了什么? 在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。 宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参 格式: #define 宏名(形参表) 字符串 // 第1行中定义了一个带有2个参数的宏average, #define average( ,宏名average跟(a, b)之间是有空格的,于是,第5行就变成了这样: int a = (a, b) (a+b)/2(10, 4); 这个肯定是编译不通过的 2)带参数的宏在展开时,只作简单的字符和参数的替换
2.1 预定义宏 相较于C89标准,C99语言标准增加一些预定义宏。 C++11同样增加了对这些宏的支持,如下表: 宏名称 功能描述 —|— STDC_HOSTED 如果编译器的目标系统环境中包含完整的标准C库,那么这个宏就定义为1,否则宏的值为0 STDC C++11中这个宏是否定义以及定成什么值由编译器决定 STDC_VERSION C编译器通常用这个宏来表示所支持的C标准的版本。 C++11中这个宏是否定义以及定成什么值由编译器决定 STDC_ISO_10646 这个宏定义为一个yyyymml格式的整数常量,例如199712L,用来表示C++编译环境符合某个版本的ISO/IEC 再次编译上述代码,会出现如下信息: ? 因为static_assert是编译时期的断言,其使用范围不像assert一样受到限制。在通常情况下,static_assert可以用于任何名字空间。
于是在过去的一年中,贯彻着“人民需要什么,五菱就造什么”的理念,五菱总是会推出一些意想不到的产品。 合作开展活动;和喜茶旗下喜小茶品牌共同推出“小神车”限定盲盒;参加上海时装周打造五菱潮服等,而这些花式营销同样也对五菱的汽车销量有一定的正面影响。 其一是因为政策改变所释放的市场需求大增。近几年来,国家逐渐加强了对低速电动车的淘汰速度,而小型电动车则成了消费者替换的首选,这就为宏光MINI EV这类小型电动车提供不小的市场空间。 另外,部分有车家庭有时会出现用车紧张的情况,但总不能因为偶尔的状况再去买一辆十几万的车,这就让宏光MINI EV的价格优势就再一次显现。 这也就需要五菱将注意力从营销方面向产品方面转移,通过多个方面来加固自身城墙,保证未来发展。 打通下沉自然可以带来一定程度上销量的增长,但是面向高端也同样可以让品牌获得更多的发展机会。
当很多人把开飞机当成一个不太可能实现的愿望时,在美国工作的湖南人李湘宏,已在自家车库造出了一架两座飞机。据南都近日报道,7月2日,他开着这架飞机完成了从美国飞到加拿大的跨国飞行。 李湘宏的经历说明,无论是否有身份,只要潜心于一项事情,总会获得一定成果,也能获得认可,只要发明创造的产品足够专业和实用。 对于专业的航空公司而言,李湘宏的身份就是一位民科,或业余发明人。 所以,凭借一人之力,可以以长时间的单兵作战来弥补大兵团作战的效率,李湘宏经过一千多个日夜,用了两万多个铆钉,阅读几百千克的图纸和材料,花9万美元,完成了一架小飞机的组装,并通过了美国联邦航空管理局的适航检查 业余人搞发明创造更令人深思的是,这样的作为有什么意义。这需要从两个方面来理解。 如果全社会研究与试验发展经费(R&D经费)能拿出一部分对有实用价值的民间科研进行资助,则对一个国家的科学发展和经济增长无疑可以起到补充和增进的作用。
宏定义末尾不加分号; 宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。 宏名和参数的括号间不能有空格 宏替换只作替换,不做计算,不做表达式求解 函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存 宏定义不存在类型,也没有类型转换。 宏展开使源程序变长,函数调用不会 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值) ? "链接多行 如:#define NAME coder \ _online 我们的宏定义就讲到这里,大家有什么不明白的或者有什么意见可以关注下面的微信公众号,我们一起在线讨论。 下面是针对这篇小编为留的练习题,请实现如下宏答案会在下一篇公布: 用宏定义一个字符串常量 用带参数的宏实现求两个数的最小值 用带##的宏实现两个字符串的链接
云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。
扫码关注云+社区
领取腾讯云代金券