【发布时间】:2016-12-12 05:50:05
【问题描述】:
标题基本上说明了一切,但我特别想知道是否应该期望以下(稍微滥用)宏(使用 C99 或更高版本)工作,也就是说,它将返回一个指向有效部分的指针基于表达式大小的堆栈分配内存:
#include <stdint.h>
#define NASTY(expr) ( \
8 == sizeof(expr) ? (void *)(&(uint64_t){(expr)}) : \
( \
4 == sizeof(expr) ? (void *)(&(uint32_t){(expr)}) : \
( \
2 == sizeof(expr) ? (void *)(&(uint16_t){(expr)}) : (void *)(&(uint8_t){(expr)}) \
) \
) \
)
编辑:
我对这样一个宏感兴趣的原因是 (1) 我是一个书呆子,并且 (2) 我正在为需要动态 memcpy 表达式结果的嵌入式应用程序编写一些代码生成宏(例如如x*y+z)。我们正在开发一个对能量敏感的应用程序,其中函数调用很重要。
【问题讨论】:
-
给出一些用例示例。
-
我的意思很好,但是为什么这个问题需要用宏来提出呢?为什么预处理器是相关的?还是您在利用非标准 c 的表达式语句?
-
还有为什么三元运算符会相关?您只是在获取 something 的地址。
-
@EOF:复合文字是左值。您可以获取他们的地址。
-
范围如何与表达式有关?您实际上想知道“什么是范围”。