【问题标题】:Meaning of ~ in C define [closed]C中〜的含义定义[关闭]
【发布时间】:2021-07-02 06:59:09
【问题描述】:

我正在研究一个示例应用程序,我发现了以下文字:

#define OFS_INIT            {{(UINT16)0u},{(UINT16)~(UINT16)0u}}

void main( void )
{
    LOCAL_STATIC(, RDS_UINT16,  u16_msgOfs, OFS_INIT);
}

我没有LOCAL_STATIC 的定义,我想了解它如何与OFS_INIT 一起使用。

【问题讨论】:

  • 你知道~ 运算符是做什么的吗?
  • 除了#define 之外,这里没有特定的预处理器。它只是将OFS_INIT 替换为右侧看起来像数组或struct 初始化器的东西。
  • 预处理器所做的就是用{{(UINT16)0u},{(UINT16)~(UINT16)0u}}替换OFS_INIT
  • 您的代码在编辑后看起来无效。是真实的代码吗? OFS_INIT 仅作为初始化器才有意义。
  • 它使用与{{0}, {0}} 相同的语法,只是有一堆强制转换和否定运算符。

标签: c literals tilde


【解决方案1】:

看起来LOCAL_STATIC 是一个宏,可用于声明结构类型的变量,其字段使用参数之一进行类型化,并使用给定值进行初始化。

这可能会声明如下内容:

some_struct_type_related_to_RDS_UINT16 u16_msgOfs = OFS_INIT;

其中OFS_INIT 定义了结构的初始值:{ {0}, {0xFFFF} }

【讨论】:

  • 谢谢!现在很清楚了。
  • "是一个可以用来声明结构类型变量的宏" 或者它是(多维)数组、复合文字形式的一些粘性物质,谁知道呢。这就是为什么我们不应该发明秘密的宏语言而是坚持使用 C,因为 C 程序员实际上可以阅读 C。
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2016-02-27
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多