2015-07-01 3 views
10

Я пытаюсь скомпилировать pthreads для MSVC2015 и нашел странный код.Что означает оператор ': ='?

localPtr->wNodePtr->spin := PTW32_TRUE; 

Что это за линия?

+0

Я сделал некоторые некоторый поиск в Интернете, и лучшее, что я мог определить, что это просто еще один способ для выполнения (х = 5). Способ назначения вещей с x: = 5 используется на некоторых других языках. – AndrewGrant

+0

Вы можете использовать отладчик и проверять поведение, он не является стандартным для C. – ST3

+0

Ссылка: https://github.com/BrianGladman/pthreads/blob/master/ptw32_OLL_lock.c#L578 Это очень странно и, вероятно, опечатка .. Редактировать: Или нет, кажется, используется более чем в 1 месте. Возможно, оператор C++? Возможно ли это? – leppie

ответ

5

Как указывалось другими, := не является действительным 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.

В целом это похоже на альфа, бета или просто шум, поэтому просто удалите его.

4

IIRC, C standard ничего не оговаривает о := Оператор. Так что, скорее всего, это не стандарт C.

Однако, AFAIK, некоторые языки, которые используют = в качестве оператора сравнения, чтобы отделить назначения из сравнения используйте := как назначения оператора. [Пример: Паскаль, postgresql]

В некоторых других случаях он несет в себе смысл, что переменная получает , и назначил на том же шаге, чтобы отличить его от обычного назначения в другом месте. [Пример: GO]

2

: = не является допустимым оператор в С.

Это, однако, имеет применение в других языках, например, Алгол 68. В основном, для того, что вы хотите знать, то: = в этот пример используется для назначения переменной PTW32_TRUE localPty-> wNodeptr-> spin

Это делается главным образом для устранения какой-либо двусмысленности в коде, чтобы избежать использования '=' для назначения.

+0

Algol68 также имеет другие аналогичные операторы, такие как: +: = (для добавления или добавления к строке), + =: (для префикса строки), также -: =, *: =, /: =,%: = (int division) и% *: = (mod); Также не-операторы вроде: =: = (жонглирование) и =: = (swap) и: =: (сравнение указателей) ... cf. [Дьядические операторы со связанными приоритетами] (https://en.wikipedia.org/wiki/ALGOL_68#Dyadic_operators_with_associated_priorities) – NevilleDNZ

0

«: =» является присвоение переменной в синтаксисе Pascal, а тест равенства «=»

Смежные вопросы