【问题标题】:What does operator ':=' mean?运算符 ':=' 是什么意思?
【发布时间】:2015-09-18 06:22:10
【问题描述】:

我正在尝试为 MSVC2015 编译 pthread,发现一些奇怪的代码。

localPtr->wNodePtr->spin := PTW32_TRUE;

这条线在做什么?

【问题讨论】:

  • 我在网上做了一些搜索,我能确定的最好的结果是这只是另一种执行分配的方式,即 (x = 5)。用 x := 5 赋值的方式在其他一些语言中也有使用。
  • 您可以使用调试器和检查行为,这在 C 中不是标准的。
  • 参考:github.com/BrianGladman/pthreads/blob/master/… 这非常奇怪,可能是一个错字... 编辑:与否,似乎在不止一个地方使用。可能是 C++ 运算符?这甚至可能吗?
  • 但是代码编译了吗?
  • 当您构建项目时,相关文件似乎没有被编译,任何地方都没有提到它。所以我的猜测是它正在进行中,包含一个错字。

标签: c gcc syntax pthreads colon-equals


【解决方案1】:

正如其他人指出的那样,:= 不是有效的 C 运算符。

但是,这个“运算符”:=the current "PThread for Windows" source release which seems to be as of v2.9.1 中出现了两次。

这两种情况都出现在 ptw32_OLL_lock.c 中,它宣称“实现了基于队列的扩展读取器/写入器锁”,但似乎不是 pthread*.dll 构建的一部分,因此该文件ptw32_OLL_lock.c 未传递给编译器。

有趣的是,有问题的源文件包含int main(),并且不在test子目录中。

总而言之,这似乎是 alpha、beta 或只是噪音,所以删除它。

【讨论】:

    【解决方案2】:

    IIRC,C 标准没有指定任何关于 := 运算符的内容。所以,很可能,这不是标准的C

    然而,AFAIK,一些使用=作为比较运算符的语言,为了将assignmentcomparison分开,使用:=作为assignment 运算符。 [示例:Pascal、postgresql]

    在其他一些情况下,它意味着变量在同一步骤中被定义和赋值,以区别于其他地方的正常赋值。 [示例:GO]

    【讨论】:

      【解决方案3】:

      := 不是 C 中的有效运算符。

      但是它确实在其他语言中使用,例如 ALGOL 68。基本上,对于您想知道的内容,此示例中的 := 用于将变量 PTW32_TRUE 分配给 localPty->wNodeptr->spin

      这样做主要是为了消除代码中的任何歧义,以避免使用 '=' 进行赋值。

      【讨论】:

      • Algol68 还有其他类似的运算符,例如:+:=(用于添加或附加到字符串)、+=:(用于为字符串添加前缀)、还有 -:=、 :=, /:=, %:=(int 除法) 和 %:=(mod);还有非运算符,例如 :=:=(juggle) 和 =:= (交换) 和 :=: (指针比较) ... cf。 Dyadic operators with associated priorities
      【解决方案4】:

      ":=" 是 Pascal 语法中对变量的赋值,而相等测试是 "="

      【讨论】:

        猜你喜欢
        • 2013-05-07
        • 2017-03-29
        • 2011-03-16
        • 2011-07-09
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多