10

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

localPtr->wNodePtr->spin := PTW32_TRUE;

这条线在做什么?

4

4 回答 4

5

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

然而,这个“操作符”在当前的“ PThread for Windows:= ”源代码版本中出现了两次,似乎是从 v2.9.1 开始

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

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

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

于 2015-07-01T16:35:20.903 回答
4

IIRC,C标准未指定有关:=操作员的任何内容。所以,很可能,它不是标准的C

但是,AFAIK,一些使用=as 比较运算符将赋值比较分开的语言使用:=as赋值运算符。[示例:帕斯卡、postgresql]

在其他一些情况下,它的含义是在同一步骤中定义和分配变量,以区别于其他地方的正常分配。[例如:去]

于 2015-07-01T08:09:39.487 回答
2

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

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

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

于 2015-07-01T08:10:50.700 回答
0

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

于 2015-07-01T23:23:48.280 回答