运算符':='是什么意思?

10

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

localPtr->wNodePtr->spin := PTW32_TRUE;

这条线是做什么的?


我在网上进行了一些搜索,最好的结论是这只是执行赋值的另一种方式,即 (x = 5)。使用 x := 5 的赋值方式在其他一些编程语言中也被使用。 - AndrewGrant
你可以使用调试器并检查行为,这在C中不是标准的。 - ST3
参考:https://github.com/BrianGladman/pthreads/blob/master/ptw32_OLL_lock.c#L578 这非常奇怪,可能是打字错误...编辑:或者不是,似乎在多个地方都被使用。C++运算符也许?那真的可能吗? - leppie
这个StackExchange的问题可能会对您有所帮助>>http://programmers.stackexchange.com/questions/101716/in-pseudo-code-what-does-mean - K.H.A.J.A.S
2
但是代码能编译吗? - edmz
2
当你构建项目时,似乎没有编译有关文件,任何地方都没有提到它。因此,我猜测这是一项正在进行中的工作,其中包含了一个拼写错误。 - molbdnilo
4个回答


4
据我所知,C语言标准没有关于:=运算符的任何规定。因此,很可能它不是标准的C语言。
然而,据我所知,一些使用=作为比较运算符来分离赋值和比较的语言,会使用:=作为赋值运算符。[例如:Pascal、postgresql]
在其他一些情况下,它表示变量在同一步骤中被定义和赋值,以区别于其他地方的普通赋值。 [例如:GO]

2

在C语言中,:=不是一个有效的运算符。

然而,在其他语言中,例如ALGOL 68,它有用途。

在这个例子中,:=被用来将变量PTW32_TRUE赋值给localPty->wNodeptr->spin。

这主要是为了消除代码模糊不清,避免使用'='进行赋值。


Algol68还有其他类似的运算符,如+:=(用于添加或追加到字符串),+ =:(用于前缀到字符串),还有-:=,*:=,/:=,%:= (整数除法)和% *:=(mod); 还有非运算符,如:=:=(抓换)和=:=(交换)和:=:(指针比较)... cf。[具有关联优先级的二元运算符](https://en.wikipedia.org/wiki/ALGOL_68#Dyadic_operators_with_associated_priorities) - NevilleDNZ

0
"

":=" 是 Pascal 语法中的变量赋值符号,而等于判断符号是 "="

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接