考虑以下 C99 函数:
void port_pin_set(const bool value, const uint8_t pin_mask)
{
if (value) {
PORT |= pin_mask;
} else {
PORT &= ~pin_mask;
}
}
PORT
是一个define
,例如:
#define PORT (P1OUT)
有没有办法重新定义 PORT
以便:
- 它被接受为左值,
- 该函数不执行任何操作。
我想做的是保持函数源原样,同时编译它什么也不做。
编辑:我知道使用这样的左值可能不是最佳解决方案。我不是在为这个特定问题寻找最佳解决方案,我对语言本身很感兴趣。这是一个理论问题,而不是一个实用问题。
最佳答案
C99 具有可用于此类任务的复合文字。它们的语法是强制转换后跟一个初始化程序:
#define PORT ((int){0})
在你的情况下应该这样做,只是你可能会收到一些关于未使用值的警告。
任何体面的编译器都会优化对这种复合文字输出的赋值。
关于c - 当什么都不执行时,是否有可以使用的虚拟左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8896549/