Я пытаюсь скомпилировать pthreads для MSVC2015 и нашел странный код.Что означает оператор ': ='?
localPtr->wNodePtr->spin := PTW32_TRUE;
Что это за линия?
Я пытаюсь скомпилировать pthreads для MSVC2015 и нашел странный код.Что означает оператор ': ='?
localPtr->wNodePtr->spin := PTW32_TRUE;
Что это за линия?
Как указывалось другими, :=
не является действительным C-оператором.
Однако этот «оператор» :=
встречается дважды в the current "PThread for Windows" source release which seems to be as of v2.9.1.
Оба occurencies появляются в ptw32_OLL_lock.c
, который провозглашает «реализует расширенный устройство чтения/записи блокировки очереди на основе», но, кажется, не быть частью pthread*.dll
сборки, поэтому файл ptw32_OLL_lock.c
не передается компилятору.
Довольно интересно, что исходный файл содержит int main()
и не находится в подкаталоге test
.
В целом это похоже на альфа, бета или просто шум, поэтому просто удалите его.
IIRC, C
standard ничего не оговаривает о :=
Оператор. Так что, скорее всего, это не стандарт C
.
Однако, AFAIK, некоторые языки, которые используют =
в качестве оператора сравнения, чтобы отделить назначения из сравнения используйте :=
как назначения оператора. [Пример: Паскаль, postgresql]
В некоторых других случаях он несет в себе смысл, что переменная получает , и назначил на том же шаге, чтобы отличить его от обычного назначения в другом месте. [Пример: GO]
: = не является допустимым оператор в С.
Это, однако, имеет применение в других языках, например, Алгол 68. В основном, для того, что вы хотите знать, то: = в этот пример используется для назначения переменной PTW32_TRUE localPty-> wNodeptr-> spin
Это делается главным образом для устранения какой-либо двусмысленности в коде, чтобы избежать использования '=' для назначения.
Algol68 также имеет другие аналогичные операторы, такие как: +: = (для добавления или добавления к строке), + =: (для префикса строки), также -: =, *: =, /: =,%: = (int division) и% *: = (mod); Также не-операторы вроде: =: = (жонглирование) и =: = (swap) и: =: (сравнение указателей) ... cf. [Дьядические операторы со связанными приоритетами] (https://en.wikipedia.org/wiki/ALGOL_68#Dyadic_operators_with_associated_priorities) – NevilleDNZ
«: =» является присвоение переменной в синтаксисе Pascal, а тест равенства «=»
Я сделал некоторые некоторый поиск в Интернете, и лучшее, что я мог определить, что это просто еще один способ для выполнения (х = 5). Способ назначения вещей с x: = 5 используется на некоторых других языках. – AndrewGrant
Вы можете использовать отладчик и проверять поведение, он не является стандартным для C. – ST3
Ссылка: https://github.com/BrianGladman/pthreads/blob/master/ptw32_OLL_lock.c#L578 Это очень странно и, вероятно, опечатка .. Редактировать: Или нет, кажется, используется более чем в 1 месте. Возможно, оператор C++? Возможно ли это? – leppie