![]() |
1
18
对于C99中的每个循环:
|
![]() |
2
37
当然,还有各种各样的最小值、最大值、ABS等。
|
![]() |
3
24
在第一种情况下,您的宏将位于您的程序中(通常只是一个文件),因此您可以使用与您发布的宏类似的宏,该宏不受参数和使用的双重计算的保护
在第二种情况下(第三种情况下甚至更多),你需要
您从GCC发布的宏(min和max)就是一个例子,它们使用全局变量
您使用这种方式:
你可以在这个主题上添加变化,以获得你所需要的FSM的味道。
|
![]() |
4
11
如果需要在不同的上下文中多次定义数据,宏可以帮助您避免多次重新列出相同的内容。 colors.def ):
|
![]() |
5
7
请注意,之间缺少逗号
|
![]() |
6
6
用于GCC的Foreach循环,特别是带有GNU扩展的C99。使用字符串和数组。可以通过将动态分配的数组强制转换为指向数组的指针,然后取消对它们的引用来使用它们。
这段代码已经过测试,可以在GNU/Linux上与GCC、ICC和Clang一起使用。 Lambda表达式(仅限GCC)
|
![]() |
7
6
有人提到 container_of()
现在如果我们有一个指向 B ,我们可以使用 (的)容器 事情
这不是疯狂的宏代码。它将提供关于错误的良好编译器行号,并与调试器配合使用。它也是相当类型安全的,除了结构使用多种类型的情况(例如,如果我们允许的话) 颜色 一)。
|
![]() |
8
5
节省一些容易出错的计数 |
![]() |
9
4
其他答案中缺少另一个:
|
![]() |
10
2
我也喜欢这个:
|
![]() |
11
2
只有标准的:
但是那里没有什么太漂亮的东西。 |
![]() |
12
2
查找最接近的大于x的32位无符号整数。我使用它将数组的大小增加一倍(即高水位线)。 |
![]() |
13
1
将字节、字、DWORD打包为字、DWORD和QWORD:
插入参数避免扩展的副作用始终是一种好的做法。 |
![]() |
14
0
还有多类型的最小值和最大值
|
![]() |
15
0
检查是否使用浮点 x
|
![]() |
16
0
我经常使用的一个(极少数)宏是将参数或变量声明为未使用的宏。要注意这一点,最兼容的解决方案(IMHO)因编译器而异。 |
![]() |
17
-1
这一个太棒了:
我使用它就像:
|
![]() |
18
-1
真与假似乎很受欢迎。 |
![]() |
TSG · 创建定义编译器变量并调用方法的C++宏 7 月前 |
![]() |
Edward Falk · 你能比较C预处理器中的两个常量指针吗? 8 月前 |
![]() |
ma1169 · 宏:不应忽略void值 1 年前 |
![]() |
Bhargav Patil · 运算符的大小并尝试打印数组 1 年前 |
![]() |
David Robie · VIM:寄存器中填充字符断点宏的有向图 1 年前 |
![]() |
Sofia Zaiafarova · 定义宏并使用数据类型查找绝对值 1 年前 |
![]() |
Daniel Muñoz · C[重复]中类宏函数的语法 1 年前 |
![]() |
SupAl · 避免在没有宏的情况下构建对象 1 年前 |