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

为什么在使用不相关的宏时会阻止while循环结束?

在使用不相关的宏时会阻止while循环结束的原因是,宏在预处理阶段会进行简单的文本替换,将宏的调用处替换为宏定义中的内容。如果在while循环中使用了不相关的宏,那么在每次循环迭代时,宏的替换可能会导致循环条件的判断结果发生变化,从而影响循环的结束条件。

具体来说,当使用不相关的宏时,宏的替换可能会引入额外的代码或改变原有代码的语义,导致循环条件的判断结果不再符合预期。这可能会导致循环条件始终为真或始终为假,从而导致while循环无法正常结束。

为避免这种情况发生,应当在使用宏时确保宏的定义和使用是相关的,即宏的替换结果不会改变循环条件的判断结果。同时,在编写宏时应当遵循良好的编码规范,确保宏的替换结果不会引入意外的副作用或改变原有代码的语义。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(ECS):提供弹性计算能力,满足各类业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):提供高性能、可扩展的 MySQL 数据库服务。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能机器学习平台(AI Lab):提供丰富的人工智能开发工具和资源,支持开发者快速构建和部署 AI 应用。详情请参考:https://cloud.tencent.com/product/ai
  • 物联网通信平台(IoT Hub):提供稳定可靠的物联网设备连接和数据传输服务,支持海量设备接入和实时通信。详情请参考:https://cloud.tencent.com/product/iothub
  • 移动推送服务(Push):提供高效可靠的移动设备消息推送服务,帮助开发者实现消息推送功能。详情请参考:https://cloud.tencent.com/product/tpns
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 中为什么不推荐 while 循环使用 sleep()

前言最近逛 CSDN 看到一篇文章,文章大意是说为什么循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...= true; public static void main(String[] args) { while (FLAG) { try {...比如微服务体系中,客户端上报实例状态,或者服务端检测客户端状态都会使用定时轮询机制。...比如一些用户登录场景,当用户登录状态改变时,发送登录事件进行后续处理,比如登录通知等等等待和唤醒等待和唤醒机制一般适用于等待时间较长场景,因为等待和唤醒是一个性能消耗比较大操作;等待时间不是很长场景可以使用轮询机制... Java AQS 等待获取锁和线程池任务为空等待新任务时,会使用等待和唤醒操作轮询机制 和 等待和唤醒 一般会结合使用,避免线程频繁挂起和唤醒。

65530

详解 JS 中事件循环微任务、Primise对象、定时器函数,以及其在工作中应用和注意事项

什么是任务(MacroTasks)和 微任务(MicroTasks) 任务 任务是 JavaScript 事件循环一个较大任务单元,每个任务执行时会开启一个新事件循环 一个任务完成通常会涉及到一个较为完整工作流程...当 事件循环执行时,它会首先检查任务队列,执行完当前任务后,再执行所有的微任务。 微任务执行完毕后,浏览器可能会进行渲染操作(如果需要),然后事件循环会继续到下一个任务。...它不会阻止后续代码执行,而是背后计时,一旦时间到达,就将回调函数加入到事件队列中,等待执行。...setImmediate 是一个 Node.js 环境中使用函数,用于安排一个回调函数在当前事件循环结束后、下一次事件循环开始前被立即执行。...process.nextTick 会在当前事件循环任何阶段结束后立即执行,甚至进入下一个事件循环阶段之前。

1200

单片机c语言程序设计试卷_stm32常见面试题

#define 语法基本知识(例如:不能以分号结束,括号使用,等等) 2)....标识#define中应用基本知识。...这个操作符存在C语言中原因是它使得编译器能产生比if-then-else更优化代码,了解这个用法是很重要。 3). 懂得中小心地把参数用括号括起来 4)....我也用这个问题开始讨论副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b);#include #define MIN(a,b) ((a)<=(b)?...当然如果你不是找一个书呆子,那么应试者最好希望自己不要知道答案。死循环(Infinite loops)4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。

74320

玩转iOS“定义”

,首先__COUNTER__每次替换时都会进行自增,##是一种中专用特殊符号,用来将参数拼接到一起,但是需要注意,使用##符号拼接的如果是另外一个,则其会阻止展开,因此我们定义了一个转换...如果你一下子不能理解为什么这样就可以解决展开问题,你只需要记住这样一条展开原则:如果形参有使用#或##这种处理符号,则不会进行参数展开,否则先展开参数,展开当前。...多语句功能性,要使用do-while包裹       这条原则看上去有些莫名其妙,但是其非常重要,例如,我们需要编写一个自定义LOG进行打印时添加一些自定义信息,你或许会这样写: #define...: 展开过程中会先将参数进行展开,如果使用##对参数进行了拼接或使用#进行了处理,则此参数不会被展开。...(0) NSAssert定义中使用到了不定参数拼接消除逗号技巧,并且是多行语句使用do-while进行优化一个实践。

3.4K11

vue源码中nextTick是怎样实现

这是为什么,什么原因引起这个BUG。Vue 官方是这么解释 点击事件是任务,上点击事件触发 nextTick(微任务)上第一次更新。事件冒泡到外部div之前处理微任务。...为了解决这个问题,您可以简单地给两个外部div不同键,以强制更新期间替换它们。这将阻止接收冒泡事件。...点击事件是个任务,当点击事件执行完后触发 nextTick(任务)上更新,只会在下一个事件循环中进行,这样其事件冒泡早已执行完毕。就不会出现 BUG 中情况。...但是过不久,实现 timerFunc 顺序又改为 Promise,MutationObserver,setImmediate,setTimeout,在任何地方都使用任务会产生一些很奇妙问题,其中代表...为什么呢,回到 #6566 BUG 中。由于micro task执行优先级非常高, #6566 BUG 中比事件冒泡还要快,就会导致此 BUG 出现。

57510

JavaScript中单线程运行,任务与微任务,EventLoop

所以,一行代码执行过程过,必然不会执行另一行代码,就行你使用了alert(1)以后在后面疯狂console.log(),如果执行到 alert(1),你没有关闭这个弹窗,后面的console.log...setTimeout 是任务异步,Promise.then()是微任务异步,微任务是优先于任务执行,所以,此时会先跳过 setTimeout 任务,执行两个 Promise.then() 微任务...所以,我们上面的分析步骤是正确。 但是有一个问题,什么呢?可以看到,浏览器中,会有一个 undefined 返回值。为什么呢?...(countdonn--) { } // 我们确保这个循环执行速度会超过定时器倒计时,导致这轮循环没有结束时,setTimeout已经可以执行回调了,所以会先执行`setTimeout`再结束这一轮循环...也可以实现相同效果 上面的为什么有这样解决方法,从上面的定义中就可以看出来。

3.4K42

Js异步机制实现

callback,前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序执行顺序与任务排列顺序是不一致、异步。...var i = 3000000000; while(--i) { } console.log("循环执行完毕"); 本地测试,设置setTimeout回调函数大约在30s之后才执行,远远大于4ms...,我主线程设置了一个非常大循环来阻塞Js主线程,注意我并没有设置一个死循环,假如我在此处设置死循环来阻塞主线程,那么设置setTimeout回调函数将永远不会执行,此外由于渲染线程与JS引擎线程是互斥...,Js线程处理任务时渲染线程会被挂起,整个页面都将被阻塞,无法刷新甚至无法关闭,只能通过使用任务管理器结束Tab进程方式关闭页面。...Event Loop 主线程从任务队列中读取事件,这个过程是循环不断,所以整个这种运行机制又称为Event Loop,Event Loop是一个执行模型,不同地方有不同实现,浏览器和NodeJS

2.7K20

Event Loop 可视化解析讲解

并且能够某个函数结束后,利用存储栈帧中信息,执行剩余代码。使得JS应用拥有记忆。 当JS代码第一次被执行时,此时调用栈是「空」。...修改数据之后立即使用这个方法,获取更新后 DOM。...Vue.nextTick(callback) 使用原理:Vue 是异步执行(会被推入到任务队列中)dom更新,一旦观察到数据变化,Vue就会开启一个队列,然后把同一个事件循环 (event loop...❝V8 会为每个任务维护一个微任务队列 ❞ 同时,微任务被执行时机,是V8要销毁全局代码环境对象,此时会调用环境对象「析构函数」 (这是C++一个概念),此时,V8 会检查微任务队列,如果微任务队列中存在微任务...promise中抛出错误时,因为错误实际上是从消息队列中异步抛出,所以并不会阻止运行时继续执行同步指令。

50241

Node 事件循环知多少

浏览器中事件循环 任务和微任务 事件循环异步队列有两种:任务( macro )队列和微任务( micro )队列。 任务队列有一个,微任务队列只有一个。...执行过程中,会判断是同步任务还是异步任务,通过对一些接口调用,可以产生新任务与微任务,它们会分别被推入各自任务队列里。... Promise1,同时会生成一个任务 setTimeout2。...执行任务 setTimeout1 时会生成微任务 Promise2 ,放入微任务队列中,接着先去清空微任务队列中所有任务,输出 Promise2。...假设 poll 被堵塞,那么即使 timer 已经到时间了也只能等着,这也是为什么上面说定时器指定时间并不是准确时间。

58710

17.计算机科学导论之计算理论学习笔记

while(X) { decr(X) incr(Y) } 示例5.模拟简单语言中,我们可使用加法因为整数乘法可以用重复加法来模拟,注意我们需要把X值保存在一个临时变量中,因为每次加法中我们需要把原始值加到...WeiyiGeek.incr(X)语句图灵机图 2.decr(X)语句图灵机 此处,我们使用最小指令数目来实现decr(X)语句, 其原因是我们在下一条语句(while循环)中要用到这个语句,它也被用来实现所有的...WeiyiGeek.decr(X)语句图灵机图 3.while语句图灵机 为了模拟循环,我们假定X和循环体处理数据存储磁带上,中间以单个空白字符相隔,三个状态 Si、S和 S;控制了循环,它通过判断值...状态 M把读/写头移过每次重复中处理数据开始时定义了数据开始位置空白符号:状态M把读/写头移过每次重复中处理数据结束时定义了X开始位置空白符号;状态Bs定义了循环开始状态,而状态 B定义了循环停机状态...一个重复结构可能永远都不会结束(停机),这就是说一个含有无限循环程序可以永远运行,但是程序开发者通常需按照需求进行设置跳出循环条件,否则可能导致死循环(严重时会导致系统崩溃)。

51120

【C语言】内联函数总结

为什么需要内联函数 C语言中,如果一些函数被频繁调用,不断地用函数入栈,即函数栈,则会造成栈空间或者栈内存大量消耗,为了解决这个问题,特别的引入了inline关键字,表示为内联函数。...,使用inline修饰带来好处我们表面看不出来,其实,在内部工作就是每个for循环内部任何调用dbtest(i)地方都换成了(i % 2 > 0) ?...关键字来修饰,只有当程序结束时候才会释放掉,使用static inline修饰时,函数仅在文件内部可见,不会污染命名空间,另外,函数在运行过程中也会分配内存空间,但是由于static存在,就和修饰变量类似...inline函数其实就是空间换时间 inline 和区别 虽然inline函数和带参数很像,但是使用方法上和还是有很大区别的: inline()函数 带参数 展开时机 在编译时候展开...,因此使用带参数时会有一些副作用,编写程序是要人为预防 是否允许有复杂语句 不允许出现复杂语句,如果出现复杂语句,该函数将不会展开,例如递归,大型循环等 对此不做要求。

17510

JS是单线程,你了解其运行机制吗?

而且主线程只有将当前消息执行完成后,才会去取下一个消息。这种机制就叫做事件循环机制,取一个消息并执行过程叫做一次循环。...事件循环用代码表示大概是这样while(true) { var message = queue.get(); execute(message); } 那么,消息队列中放消息具体是什么东西...(又称为微任务),可以理解是在当前 task 执行结束后立即执行任务 也就是说,在当前task任务后,下一个task之前,渲染之前 所以它响应速度相比setTimeout(setTimeout是task...优先级高于Promise,也就是可以简单理解为:任务结束后会先执行微任务队列中nextTickQueue部分,然后才会执行微任务中Promise部分。...但是最终实践证明:第一个循环里,process.nextTick1和promise then这两个microTask是setTimeout这个macroTask里之前输出,这是为什么呢?

2.1K20

JavaScript Event Loop

这就是为什么当浏览器解析 JavaScript 代码时为什么会阻塞页面渲染,因为这两个事务同一个线程里。...事件循环期间某个时刻,运行时会从最先进入队列消息开始处理队列中消息。被处理消息会被移出队列,并作为输入参数来调用与之关联函数。调用一个函数总是会为其创造一个新栈帧。...而我们写动画时,常常使用 setTimeout 来实现(当然,现在一般是使用 requestAnimationFrame),比如下面的函数会让一个 div 盒子一直进行显示和隐藏动画: var div...浏览器端一次只取一个任务),每个任务阶段(是阶段,一共有六个阶段)执行完毕后,开始执行微任务,再开始执行下一阶段任务,以此构成事件循环。...setImmediate: 在当前回合 Node.js 事件循环结束时调用函数。而 process.nextTick() 函数是事件循环开始之前执行。

1.3K20

Python打牢基础,从12个语法开始!

:返回一个片段,冒号前后分别为开始下标和结束下标 # 包括开始下标,但不包括结束下标 # 因此c[1:5]表示,返回下标从1到4片段,即第二个到第五个字符 print c[1:5] # 冒号前后下标同样可以使用负数...连续相同缩进水平代码处于同一个代码块,使用 for 、 while 、 if 、 try 等语法时需要注意每行代码缩进。...while 循环 while 循环思想是,只要某一条件成立,就不断执行循环体里代码,直到条件不再成立。...flag = 1 while flag < 10: print flag # 一定要记得循环体里修改条件变量 # 否则可能导致死循环 flag += 1 for 循环...for 循环循环次数一般是事先预知,将一个标志变量从某个起始值迭代到某个终止值后即结束

76810

C语言中定义

定义中do-while循环do do循环必须始终随跟着一个分号,因此我们不会遇到if语句中使用那样问题了。...becomes do { gets(str); puts(str); } while (0); */ 为什么定义时需要使用do-while语句呢?...当使用do{ }while(0)时由于条件肯定为false,代码也肯定只 执行一次, 肯定只执行一次代码为什么要放在do-while语句里呢? 这种方式适用于定义中存在多语句情况。...if后面有两个语句,这样是无法编译通过,那为什么非要do-while而不是简单用{}括起来呢。...所以一般多表达式定义中都采用do-while(0)方式。 3. "空操作"定义 了解了do-while循环作用,再来看"空操作"定义。

6.1K10

JS事件循环任务和微任务

众所周知,JS 是一门单线程语言,可是浏览器又能很好处理异步请求,那么到底是为什么呢? JS 执行环境一般是浏览器和 Node.js,两者稍有不同,这里只讨论浏览器环境下情况。...:先执行一个任务,执行过程中如果产出新/微任务,就将他们推入相应任务队列,之后执行一队微任务,之后再执行任务,如此循环。...以上不断重复过程就叫做 Event Loop(事件循环)。 每一次循环操作被称为tick。 ?...输出script end 任务第一个执行结束 当前任务队列:微任务[then1],任务[timeou1, timeout2] 微任务: 执行 then1,输出then1 微任务队列清空 当前任务队列...,但是因为then中while操作被延迟了4s,所以一直推迟到了4s秒后才执行setTimeout。

1.1K10

C++入门(2)

3、没有类型安全检查 那么 就可以使用enum const inline 替代  enum const -> 常量  inline ->函数 函数优点就是不用建立栈帧,提高效率。...8.2 auto简介 早期C/C++中auto含义是:使用auto修饰变量,是具有自动存储器局部变量,但遗憾 是一直没有人去使用它,大家可思考下为什么?...for里面会自动取数组里面的值赋值给e,自动判断结束,自动++。 如果想要修改数组里面的值,auto后面使用引用就可以了。...,可以用 continue 来结束本次循环,也可以用 break 来跳出整个循环 。...为了提高代码健壮性,在后续表示指针空值时建议最好使用 nullptr 。 今天分享到这里就结束了,感谢大家阅读!

8710

python else语句循环运用详解

那么就也是说当while循环正常结束时候才会执行else语句,若被break则将无法执行 (2)分析:将内循环计数器改为j = 6为什么会输出10个小于?...首先要知道,不管是while循环还是for循环使用else都是一样道理,当循环正常结束才会执行else,否则将不会执行else语句。 外循环循环10次,内循环5次,外循环1次,内循环5次。...3、while循环与for循环适用场景? while循环 当对循环次数未知时候,使用while循环再合适不过。...当然也可以应用于循环次数已知情况,但是有时会使代码量增多 for循环 当对循环次数已知情况下使用for循环,并且迭代列表、元组、字符串和字典时候for循环显得及其优美,也可以说for循环是为迭代元素量身定制...当循环正常结束时候,就会去执行else语句,若碰到break而提前结束,将不会执行else;当循环未能执行时候,会自动执行else语句 到此这篇关于python else语句循环运用详解文章就介绍到这了

1.7K20
领券