gpt4 book ai didi

c - 为什么要用这个宏?

转载 作者:行者123 更新时间:2023-12-04 11:08:28 26 4
gpt4 key购买 nike

我正在尝试使用 Texas Instruments 示例编写一些微 Controller 代码,它到处都使用宏(可能是为了减少代码大小),其中一些宏被 st() 包围。看了评论,还是不明白为什么需要这个,什么时候应该用:

/*
* This macro is for use by other macros to form a fully valid C statement.
* Without this, the if/else conditionals could show unexpected behavior.
*
* For example, use...
* #define SET_REGS() st( ioreg1 = 0; ioreg2 = 0; )
* instead of ...
* #define SET_REGS() { ioreg1 = 0; ioreg2 = 0; }
* or
* #define SET_REGS() ioreg1 = 0; ioreg2 = 0;
* The last macro would not behave as expected in the if/else construct.
* The second to last macro will cause a compiler error in certain uses
* of if/else construct
*
* It is not necessary, or recommended, to use this macro where there is
* already a valid C statement. For example, the following is redundant...
* #define CALL_FUNC() st( func(); )
* This should simply be...
* #define CALL_FUNC() func()
*
* (The while condition below evaluates false without generating a
* constant-controlling-loop type of warning on most compilers.)
*/
#define st(x) do { x } while (__LINE__ == -1)

您能举例说明当 st 不存在时会发生什么情况吗?在不需要的地方添加 st 有什么坏处吗?

st 代表什么?第二个带有 { something } 的示例何时会产生编译器错误?因为它也用在一些示例代码中。

最佳答案

“do {...} while (0)”是一种用于避免某些类型问题的技术。

__LINE__ == -1 可能用于避免某些编译器警告。 __LINE__ == -1 将始终为 false。

看看这个链接,它会解释“do...while(0)”的原因

http://cnicholson.net/2009/02/stupid-c-tricks-adventures-in-assert/

关于c - 为什么要用这个宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com