c - 当什么都不执行时,是否有可以使用的虚拟左值?

标签 c embedded language-lawyer

考虑以下 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/

相关文章:

c - 在 C 中反转链表

c - 在此代码中可以将 8 位或 16 位值存储到 16 位对齐缓冲区吗?

c - 使用霍夫曼编码的文本数据压缩

testing - 如何在 Greenhills 编译器中创建构建日志文件?

embedded - Udacity : Functional Hardware Verification. 有哪些实现?

c++ - 隐式转换 : is the following warning valid?

c++ 是否需要在用户定义和特定于类的删除运算符中处理 nullptr。?

c - 内存分配 - 通过引用调用 String-Array-Parameter

c - MSP430FR6989 按钮和 LED 切换

c++ - 通用 lambda、继承和尾随返回类型 : is this valid code?