- 浏览: 3047869 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
真是的,我用C++还是太少了。这个宏以前明明见过的,但其存在的意义突然就想不起来了。刚才问了下axx大才又“知道”了一次。赶紧记下来。
这样的宏见过么:
(注意while(0)后面没有分号)
乍一看这个宏不过就是定义了个包含多个语句的local scope,用do..while(0)包围起来简直多此一举。直接这样不就好了么:
但问题是这两者不等价……
关键问题是前者定义出来的宏是一个非复合语句,而后者是一个复合语句。C/C++里有些语法结构对复合/非复合语句之间的区别是敏感的,例如说:
要是FOO(x)展开后是一个复合语句,那么FOO(x)后面的分号“;”就会终结整个if语句,导致else子句孤立而出现编译错误。
所以关键是那个while(0)后面不加分号。如果加了分号的话就没意义了。
如果用复合语句版本的宏,就要记得不写那个分号:
但是这样与一般的函数调用风格不统一,所以很多人倾向于使用do..while(0)这个trick来把local scope包起来而不是直接用复合语句({..})。
印象中这类的宏还有一个变种,
还是怎样的。具体是怎么写的忘记了……以后想起来的话一定得记下来 T T
这样的宏见过么:
#define FOO(x) do {\ some_code_line_1;\ some_code_line_2;\ } while (0)
(注意while(0)后面没有分号)
乍一看这个宏不过就是定义了个包含多个语句的local scope,用do..while(0)包围起来简直多此一举。直接这样不就好了么:
#define FOO(x) {\ some_code_line_1;\ some_code_line_2;\ }
但问题是这两者不等价……
关键问题是前者定义出来的宏是一个非复合语句,而后者是一个复合语句。C/C++里有些语法结构对复合/非复合语句之间的区别是敏感的,例如说:
if ( someCond ) FOO(x); else //...
要是FOO(x)展开后是一个复合语句,那么FOO(x)后面的分号“;”就会终结整个if语句,导致else子句孤立而出现编译错误。
所以关键是那个while(0)后面不加分号。如果加了分号的话就没意义了。
如果用复合语句版本的宏,就要记得不写那个分号:
if ( someCond ) FOO(x) else //...
但是这样与一般的函数调用风格不统一,所以很多人倾向于使用do..while(0)这个trick来把local scope包起来而不是直接用复合语句({..})。
印象中这类的宏还有一个变种,
#define FOO(x) switch(0) default: ...
还是怎样的。具体是怎么写的忘记了……以后想起来的话一定得记下来 T T
评论
1 楼
lwwin
2008-05-04
当时偶们问这个问题的时候,老大们的解释是C++对象的释放,而且不需要使用GOTO,直接一个break就可以了……流程上也简单些-
另外就是FX大说得了-v-+ 好神奇的用法
PS:最近看打一个GCC的特性用法比如可变参数的宏,这个很有趣啊……
可是VC都不认得- -
另外就是FX大说得了-v-+ 好神奇的用法
PS:最近看打一个GCC的特性用法比如可变参数的宏,这个很有趣啊……
可是VC都不认得- -
发表评论
-
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21489(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
struct做参数不能从寄存器传?
2013-08-28 23:33 0test test test struct Foo { i ... -
[入门级] 使用inline函数的陷阱
2011-04-21 22:39 0xxx.hpp xxx.inline.hpp inline ... -
C++的vtable的name mangling
2011-04-21 21:53 0_ZTV 开头 -
C++里用typedef struct...
2010-06-12 14:42 3887今天要写个东西,参照的一段C++代码里看到了诡异的东西,形式类 ... -
C++的虚方法调用的开销
2010-01-10 02:53 0不只是从vftbl找到函数指针那么简单而已。因为C++支持多继 ... -
C++求值顺序
2009-12-12 23:16 0呵呵,有个例子总是形 ... -
__fastcall由callee做栈平衡
2009-10-14 01:51 0#include <iostream> usin ... -
typedef...
2009-06-16 21:22 0原来函数指针能这样用的啊……原来typedef不只可以用来声明 ... -
拿vtable来玩玩
2009-06-04 03:53 0#include <iostream> usin ... -
从1加到N……我败了
2009-05-11 10:06 0有人提到Python比C++优越因为代码短而简洁,并举例说1加 ... -
delete NULL会怎样?
2009-04-22 10:03 8104原文在此:Can you delete a NULL poin ... -
Boost 1.35.0
2008-06-25 04:45 0Boost C++ Library Version 1.35. ... -
确定性析构在有指针的环境下的麻烦之处
2008-05-16 11:26 2624刚考完大软,心里还在 ... -
typename关键字的使用
2008-05-15 11:31 2907忘了……模板啊忘光了 T T 今天有同学考C++,后来问了我 ... -
火星了,今天才知道C++0x也通过了lambda表达式/闭包的提案
2008-04-16 19:31 3078如题。我总是后知后觉诶。不过这提案有意思…… 之前我在C#与 ... -
将ANTLR生成的.tokens文件重格式化(C++版)
2008-03-28 02:02 2458相关链接: 将ANTLR生成的.tokens文件重格式化(Ru ... -
奇怪的宏
2007-11-05 22:19 2113我C++确实不怎么样,不过近来不得不再唤醒那远古的记忆……即使 ...
相关推荐
是……的时候了。"用于时间点的强调。"Is there anything special...? ……有什么特别的事情吗?"询问特殊事件,"teach sb how to do... 教某人怎样做……"涉及教导过程。 **语法部分** 在语法方面,重点讲解了...
5 调试分析………………………………………………………………………… 14 5.1 时间复杂度的分析………………………………………………………………14 5.2 运行结果…………………………………………………………...
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { ...
根据提供的文档信息,我们可以归纳出一系列重要的英语词组及其用法。这些词组对于准备专升本考试的学生来说至关重要,不仅能够帮助他们在阅读理解部分更好地理解文章内容,还能提升写作和口语表达的能力。下面我们将...
通过使用方法参数关键字,可以更改这种行为。如果没有ref,out则默认为值传递,虽然可以在方法中修改这个参数的值,但是修改后的值不会还会到调用该方法的程序中. params :params 关键字可以指定在参数数目可变处采用...
】是2019年人教新目标版八年级英语下册的一个单元,主要聚焦在谈论过去发生的事情,特别是使用过去进行时态来描述过去的某一时刻或某段时间内的动作。以下是本单元的重点知识详细解析: **一、主题** 本单元的主题...
四、使用方法: FMLDATA.DLL提供了两个公式/函数,一个用于写数据,一个用于读数据。 (一)写数据: 写数据的公式为: "FMLDATA@WRITE"(X,N) 第一个参数X是个序列(指标),可以是CLOSE、OPEN等,也可以是公式中的...
同时,学生需要找出并猜测新词汇的意思,如"pass by"(经过)、"fall down"(落下)等,以及关键短语,如"be afraid to do"(害怕做……)和"a fourth match"(第四根火柴)。此外,学生还要学习如何用"a / an + 序...
•do while 循环语句里,即使test_expression循环条件的值开始是假,do while循环也会执行循环体。因此, do while循环的循环体至少执行一次。 本文原创作者:pipi-changing 本文原创出处:...
上层使用方法:循环检测UART1_RcvdSize()是否大于0,大于则进行读取等下一步处理,也可再定义高一级的应用层帧缓冲,以实现应用层的完整帧处理,或者增加一个对接收FIFO的预读功能,即读取时对接收FIFO中的帧进行...
掌握冠词的使用对于理解和表达英语至关重要,尤其是在写作和阅读中,正确使用冠词能使语言更加准确和地道。在复习高考英语时,深入理解这些冠词的用法规则,对于提高语法水平和应试能力具有很大帮助。
在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C++语言为描述工具的多种教材版本。本教实验指导书是为已经学习过C++语言的...
Java API文档是Java开发者的重要资源,提供了所有Java标准库的详细说明,包括类、接口、枚举和异常等的使用方法。 **1.7. 集成开发工具** - **1.7.1. 常用的集成开发工具** - Eclipse - IntelliJ IDEA - ...
- 注释格式应尽量统一,推荐使用“/*……*/”。 - 注释语言建议以中文为主,除非能够用流利的英文表达。 8. **代码自注释**: - 通过合理的命名和结构化代码来实现一定程度的自注释效果。 9. **程序块结束标记*...
char 16bit, 0~2^16-1 (2^16=6万6) byte 8bit, -2^7~2^7-1 (2^7=128; 注意:两个 byte 数相加,变 int 型) short 16bit, -2^15~2^15-1 (2^15=32768) int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字) ...
假定数据点D={X1…….Xn},任务是找到 k 个聚类{C1……Ck}: 伪代码如下: for k=1,…n,令 R(k)为从 D 中随机选取的一个点; while 在聚类 Ck 中有变化发生 do 形成聚类; for k=1,….,n do Ck={X 属于 ...
do while 不是终点 是否有可以移动的相邻位置? if 有可以移动的相邻位置 then 将当前位置入栈 移动到相邻位置 else 若栈空,结束寻找过程,并返回 0 回溯到栈顶中的位置 endif loop 在求精以上算法程序的过程中,...