2015-07-01 23 views
10

Próbuję skompilować pthreads dla MSVC2015 i znalazłem dziwny kod.Co oznacza operator ': ='?

localPtr->wNodePtr->spin := PTW32_TRUE; 

Co robi ta linia?

+0

zrobiłem jakieś kilka wyszukiwania w internecie, a najlepiej mogę określić, że jest to po prostu kolejny sposób, aby wykonać przypisanie, tj. (x = 5). Sposób przypisywania rzeczy za pomocą x: = 5 jest używany w niektórych innych językach. – AndrewGrant

+0

Można użyć debuggera i sprawdzić zachowanie, nie jest standardem w C. – ST3

+0

Reference: https://github.com/BrianGladman/pthreads/blob/master/ptw32_OLL_lock.c#L578 To jest bardzo dziwne i prawdopodobnie literówka .. Edycja: Czy nie, wydaje się być używane w więcej niż 1 miejscu. Może operator C++? Czy to w ogóle jest możliwe? – leppie

Odpowiedz

5

Inni podkreślali, że := nie jest prawidłowym operatorem C.

Jednak ten "operator" := znajduje się dwukrotnie w the current "PThread for Windows" source release which seems to be as of v2.9.1.

Oba occurencies pojawiają się ptw32_OLL_lock.c, która głosi „narzędzia przedłużony do odczytu/zapisu zamki kolejki oparte”, ale nie wydaje się być częścią kompilacji pthread*.dll, więc plik ptw32_OLL_lock.c nie są przekazywane do kompilatora.

Co ciekawe, dany plik źródłowy zawiera numer int main() i nie znajduje się w podkatalogu test.

Podsumowując, wydaje się, że jest to alfa, beta lub po prostu szum, więc po prostu go usuń.

4

Standard IIRC, C nie podaje nic o operatorze :=. Najprawdopodobniej nie jest to standard C.

Jednakże AFAIK niektóre języki, które wykorzystują = jako operator porównania, aby oddzielić zadanie z porównaniu użyć := jako przyporządkowanie operatora. [Przykład: Pascal, postgresql]

W niektórych innych przypadkach oznacza to, że zmienna jest określana jako i przypisana w tym samym kroku, aby odróżnić ją od normalnego przypisania w innym miejscu. [Przykład: GO]

2

: = nie jest poprawnym operator w C.

to ma jednak zastosowanie w innych językach, np ALGOL 68. Zasadniczo, co chcesz wiedzieć, wyrażenie: = w ten przykład jest używany do przypisania zmiennej PTW32_TRUE do localPty-> wNodeptr-> spin

Odbywa się to głównie w celu usunięcia wszelkich niejasności w kodzie, aby uniknąć używania '=' do przypisania.

+0

Algol68 posiada również inne podobne operatory, takie jak: +: = (do dodawania lub dołączania do ciągu znaków), + =: (w przypadku prefiksacji do ciągu), a także -: =, *: =, /: =,%: = (int dzielenie) i% *: = (mod); Również nie-operatorzy jak: =: = (juggle) i =: = (swap) i: =: (porównanie wskaźnika) ... cf. [Operatory dysków o powiązanych priorytetach] (https://en.wikipedia.org/wiki/ALGOL_68#Dyadic_operators_with_associated_priorities) – NevilleDNZ

0

„: =” jest przypisanie do zmiennej w składni Pascala, natomiast próba równość jest „=”