首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言 嵌套展开规则

先讲一些嵌套展开规则: 一般展开规律像函数参数一样:先展开参数,再分析函数,即由内向外展开; 当中有#运算符时候,不展开参数; 当中有##运算符时候,先展开函数,再分析参数; ##运算符用于将参数连接到一起...,预处理过程把出现在##运算符两侧参数合并成一个符号,注意不是字符串; “#”和“##”使用规则: “#”是将参数转换为字符串。...例如: #define T(x) #x int temp = 10; cout << T(temp) << endl; //输出 temp 而不是 10 // T(temp) -> "temp" (将参数用双引号包含起来形成一个字符串...下面我将嵌套展开规则用流程图来说明一下: 注意:上图中 2 和 3 是条件或,只要满足一个条件就会进入流程 5。...a_PARAM(INT_1)) -> 展开 TO_STRING1:"a_PARAM(INT_1)" 注意:嵌套展开规则与编译器有关,不同编译器可能对同一个嵌套展开不同。

1.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

查找第k元素(O(n)递归解法)

今天分享一个小技巧,虽然是小技巧但是还是很有价值,曾经是微软面试题。...题目是这样,一个无序数组让你找出第k元素,我当时看到这道题时候也像很多人一样都是按普通思维,先排序在去第K个,但是当数组非常大时候,效率不高,那有没有简单方法了,其实我们早就学过,只是我们不善于思考和变通...分析:快速排序选择一个pivot对数组进行划分,左边小于pivot,右边大于等于pivot,所以我们计算左边小于pivot(加上pivot)个数count总共有多少,如果等于k,正是我们所要,如果大于...k,说明第k数在左边,那就在左边进行我们递归;否则,在右边,那么说明右边k-count小数就是我们所要,在右边进行我们递归。...22 return A[k]; 23 if(s>k){i=beg;j--;} //在左侧寻找 24 if(s<k){j=end;i

1.1K50

C语言练习之递归实现nk次方

前言 使用C语言递归计算Nk次方 一、思路 求nk次方原理就是: n^k = nn……*n(k个n进行相乘) 可以得到一个公式: f(k) = \left\{\begin{matrix}...根据这个公式我们就可以得到这道题递归思路 当k > 0时,返回n*f(k); 当k = 0时,返回1。 二、代码以及运行截图 为了方便大家交流和学习,我将程序代码和运行截图放置在了下方。...1.代码 #define _CRT_SECURE_NO_WARNINGS //编写一个函数实现nk次方,使用递归实现。...printf("%d", square(n, k)); break; } } return 0; } 2.运行截图 ---- 总结 以上就是今天要讲内容,本文简单介绍了用C语言递归求解...n^k思路,还进一步展示了代码运行结果验证了作者思路。

1.6K20

Quarkus集成nacos配置中心框架展开源了(22)

前言 博主quarkus扩展开源系列三连发了,趁热打铁,今天继续带来集成nacos配置中心扩展,也惙惙准备开源了,你准备好了么 Quarkus技术交流QQ群:871808563 项目地址:https...properties quarkus.nacos.group=DEFAULT_GROUP quarkus.nacos.server-addr=127.0.0.1:8848 默认,集成依赖后,nacos开关是关闭状态...,可以在quarkus配置文件application.properties文件中,新增如上配置开启使用。...为了在不同环境使用不同配置,quarkus.nacos.server-addr可以通过系统参数-Dnacos.serverAddr配置覆盖 quarkus配置使用方式 第一种、配置类方式 @ConfigProperties...return name; } public void setName(String name) { this.name = name; } } 这种方式可以方便把同一类配置归纳到一个类里

29350

dotnet 新项目格式与对应框架预定义

在 sdk style 项目格式支持使用多框架开发,此时需要在代码里面通过判断,在编译时候执行不同代码。...本文告诉大家在框架里面对应预定义条件编译符有哪些 在让一个 csproj 项目指定多个开发框架 - walterlv告诉大家如何在 sdk style 项目格式如何定义多框架开发,在使用多框架开发时候...,有时会使用到特定平台框架提供方法,此时就需要使用预定义通过条件判断编译符号方法,在不同框架编译不同代码 例如下面代码根据在不同平台输出不同代码 static void Main...所有 .NET Framework 都定义 NETFRAMEWORK ,此外对应不同版本使用不同 NET20 NET35 NET40 NET45 NET451 NET452 NET46 NET461...此外对应不同版本使用不同 NETCOREAPP1_0 NETCOREAPP1_1 NETCOREAPP2_0 NETCOREAPP2_1 NETCOREAPP2_2 本文说到是古老词汇,在官方用语里面叫条件编译符

85640

递归解决k个一组链表节点翻转问题

problem 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后链表。 k 是一个正整数,它值小于或等于链表长度。 如果节点总数不是 k 整数倍,那么请将最后剩余节点保持原有顺序。...示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你算法只能使用常数额外空间...并返回翻转后头结点,翻转为左闭右开区间,所以本轮操作尾结点其实就是下一轮操作头结点。 3、对下一轮 k 个节点也进行翻转操作。...4、将上一轮翻转后尾结点指向下一轮翻转后头节点,即将每一轮翻转k节点连接起来。 大致流程入下图: ? ? ? ?...head = tail 返回pre节点,也就是值为3节点作为newHead 。再次递归即可。

39510

spring框架aop理解_通俗易懂理解部分分式展开

大家好,又见面了,我是你们朋友全栈君。 1.我所知道aop   初看aop,上来就是一大堆术语,而且还有个拉风名字,面向切面编程,都说是OOP一种有益补充等等。...用了aop能让你少写很多代码,这点就够充分了吧   2就是为了更清晰逻辑,可以让你业务逻辑去关注自己本身业务,而不去想一些其他事情,这些其他事情包括:安全,事物,日志等。...其他如aspectJ还可以让你在构造器或属性注入时都行,不过那不是咱关注,只要记住,和方法有关前前后后(抛出异常),都是连接点。...这不就是把切面(也就是新方法属性:通知定义)用到目标类中吗 6.目标(target)   引入中所提到目标类,也就是要被通知对象,也就是真正业务逻辑,他可以在毫不知情情况下,被咱们织入切面...,当然这样也能逃过JVM强类型检查,我继承吗,当然查不出来了,子类重写了目标类所有方法,当然在这些重写方法中,不仅实现了目标类功能,还在这些功能之前,实现了一些其他(写日志,安全检查,事物等

19630

基于redisQuarkus分布式锁框架展开源了(21)

前言 类似的分布式锁框架封装,之前写过spring boot版本,这次quarkus版本从功能上来说没啥区别,都是以注解方式驱动,提供了分布式锁,以及业务key粒度锁定。...quarkus.klock.redis.password=sasa quarkus.klock.redis.address=redis://192.168.1.204:6379 默认情况下,klock扩展开关是关闭...,@klock表示给这个方法加上了一把分布式锁,锁名称为:(默认:全类名+方法名,通过name属性指定)+指定业务Key。...使用@KlockKey注解标注锁定业务key,尽量将锁力度减小同时满足业务需求。...如果入参是对象,可以用fieldName指定获取对象中某个属性值作为业务Key,如上代表使用user对象里name属性值作为业务Key。相同业务Key就会上锁,不同业务key就放行

15120

搞深度学习框架那帮人,不是疯子,就是骗子

第三次进军框架,微软策略是,强攻不下,组队打怪。若有一日,Onnx Runtime 框架有希望挑战Pytorch框架,肯定调转火力,支持自家。 真正竞争激烈,不是玩家多,而是高手多。...技术大牛背景李彦,牵着搜索入口现金牛,依着“牛脾气”治理百度,他看不上云计算,这倒让阿里巴巴笑了。...巧合是,他俩观点出奇地一致:云计算不是技术创新,而是一种商业模式创新。 李彦睥睨云计算,却对人工智能,满眼小星星。...2020年,国产框架在技术上不是单纯跟随者角色了,也有很多创新点可圈可点。 飞桨作为国内最早开源框架,模型库是最丰富。以模型库形式沉淀成深度学习框架生态一部分,生态也起步早。...单论技术难度,这些同类产品比深度学习框架低很多,但也各怀绝技,各有千秋,只是误放在一起比来比去,就不是内味儿了。 深度学习框架战场上,全行业最拔尖团队悉数上场。

44510

搞深度学习框架那帮人,不是疯子,就是骗子

技术大牛背景李彦,牵着搜索入口现金牛,依着“牛脾气”治理百度,他看不上云计算,这倒让阿里巴巴笑了。...巧合是,他俩观点出奇地一致:云计算不是技术创新,而是一种商业模式创新。 李彦睥睨云计算,却对人工智能,满眼小星星。...2020年,国产框架在技术上不是单纯跟随者角色了,也有很多创新点可圈可点。 飞桨作为国内最早开源框架,模型库是最丰富。以模型库形式沉淀成深度学习框架生态一部分,生态也起步早。...坏消息是,国产在市场和生态上与美国巨头依然有很大距离。 好消息是,这不是一个完全被动局面。 甚至,国产框架竞争也在细分,分化出局部战役。...单论技术难度,这些同类产品比深度学习框架低很多,但也各怀绝技,各有千秋,只是误放在一起比来比去,就不是内味儿了。 深度学习框架战场上,全行业最拔尖团队悉数上场。

43310

递归打卡2】求两个有序数组K小数

【题目】 给定两个有序数组arr1和arr2,已知两个数组长度分别为 m1 和 m2,求两个数组中K 小数。要求时间复杂度O(log(m1 + m2))。...【难度】 难 解答 这道题和我上次讲那一道题是非常非常类似的:递归打卡1:在两个长度相等排序数组中找到上中位数,如果没看过建议先看下,只是今天这道题比上次那道题少难一点,原理一样。...下面我随便讲一下原理吧:采用递归方法不断缩小 K ,把求第 K 小元素转化为第 (K-K/2) 小元素….我举个例子吧,比较容易理解。...不过这里需要注意是,有可能 k/2 值是大于 m1 或者 m2,所以如果 k/2 > m1 或者 m2 的话,我们直接令 md1 = m1-1 或者 md2 = m2-1 就行了。...// 递归结束条件 22 if(l1 > r1) 23 return arr2[l2 + k]; 24 if(l2 > r2) 25

1.7K30

【C语言】内联函数总结

inline仅是一个对编译器建议 inline函数仅仅是一个对编译器建议,所以最后能否真正内联,看编译器意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已...如果不是每个文件里定义都一样,那么,编译器展开是哪一个,那要看具体编译器而定。所以,最好将内联函数定义放在头文件中。...inline函数其实就是空间换时间 inline 和区别 虽然inline函数和带参数很像,但是在使用方法上和还是有很大区别的: inline()函数 带参数 展开时机 在编译时候展开...,因此在使用带参数时会有一些副作用,编写程序是要人为预防 是否允许有复杂语句 不允许出现复杂语句,如果出现复杂语句,该函数将不会展开,例如递归,大型循环等 对此不做要求。...只是做字符串替换操作,而不了解语句含义 是否一定被展开 不一定,是否展开由编译器决定 一定,只要使用了就可以保证被展开 接口封装 是 否 是否支持调试 是 否 总结 内联函数相比函数,会进行语法检查

19510

整理CC++可变参数

__用来把参数传递给,当被调用展开时,实际参数就传递给了printf()....如果传入可变参数存在,则会按正常工作。 可变参数进行调试 调试方式输出有很多种,但是标准方式打印一般不是很方便,于是就可以采用可变参数进行造轮子。...,该参数会展开为【22,"wow"】,newPrint第2次进行了展开: void newPrint(int, const char*) 第三步: 在打印第2个参数22,newPrint递归调用了自己,...,该参数会展开为【"wow"】,newPrint第3次进行了展开: void newPrint(const char*) 第四步: 在打印第3个参数"wow"后,newPrint递归调用了自己,传递参数为...} 上面这个函数是函数模板newPrint()“非模板重载”版本,于是展开停止,直接调用这个“非模板重载”版本,递归停止。

5.4K00

Github 1.9K Star数据治理框架-Amundsen

image.png Amundsen使命,整理有关数据所有信息,并使其具有普遍适用性。 这是Amundsen官网一句话,对于元数据管理工作,复杂且繁琐。...可用工具很多各有千秋,数据血缘做较好应该是Apache Atlas,而数据可视化做较好应该是Apache Superset。...image.png 可见,Hive,Presto等数据源通过Databuilder ingestion框架获取元数据,写入Elasticsearch和Neo4j,通过搜索服务与元数据服务提供给前端。...主要模块如下: 前端服务 作为用户交互web页面。 这是基于FlaskWeb应用程序,页面是React构建。...期待未来Amundsen发展,我们也将对其新版本与新功能发布持续关注!

2.1K22

C语言进阶指南(3)(扫雷游戏代码实现)

3)当我们点击方格后,方格当中如果不是雷,就是显示附近数量,如果点到雷,那么游戏失败4)如果方格附近没有雷,那么会在附近展开格子。...五、展开雷区试玩一下正版扫雷,我们知道如果我们排查区域没有雷,那么游戏中还会展开周围地方。那么我们该如何展开呢?我们细想一下,展开区域是不是也要扫描周围区域?...如果展开区域没有雷,是不是又要展开一次?我们可以发现这个效果是不是在重复实现一个效果,那么我们就可以用递归形式来实现展开。如何实现呢?...我们要注意,这种递归是会导致栈溢出,假设某个地方雷为0,它周围地方也是0,那么就会出现,我是0,递归一下你,你也是0,递归一下我。两者之间一直递归不退出函数,那么不就导致了栈溢出了吗?...代码中出现定义常量#define ROWS 11 //行数定义#define COLS 11 //列数定义#define ROW ROWS-2 //用户可操作数组行数定义#define

9410

玩转iOS“定义”

在初学定义时候,大家可能都会有这样一种感觉:就是完全替换么,太简单了。但如果你真这么想,那你就太天真了,不说自己编写,在Foundation框架中内置定义许多要看明白也要费一番脑筋。...三、从一个简单函数式说起      再来看下上面我们编写计算面积,正常情况下好像没什么问题,但是需要注意,归根结底不是函数,如果完全把其作为函数使用,我们就可能会陷入一系列陷阱中,比如这样使用...{ M1(1); } return 0; } 上面代码中定义两个宏基本上是没有意义,M1替换后结果是M2,M2最终被替换为参数本身,从这个例子可以看出,是可以嵌套递归展开...,但是递归展开是有原则,不会出现无限递归,例如: #define M1(A) M2(A) #define M2(A) M1(A) int main(int argc, const char * argv...这两个定义非常巧妙,以weakify为例,要看懂这个不是十分简单,首先与这个相关定义列举如下: #if DEBUG #define rac_keywordify autoreleasepool

3.4K11
领券