Próbuję skompilować pthreads dla MSVC2015 i znalazłem dziwny kod.Co oznacza operator ': ='?
localPtr->wNodePtr->spin := PTW32_TRUE;
Co robi ta linia?
Próbuję skompilować pthreads dla MSVC2015 i znalazłem dziwny kod.Co oznacza operator ': ='?
localPtr->wNodePtr->spin := PTW32_TRUE;
Co robi ta linia?
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ń.
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]
: = 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.
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
„: =” jest przypisanie do zmiennej w składni Pascala, natomiast próba równość jest „=”
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
Można użyć debuggera i sprawdzić zachowanie, nie jest standardem w C. – ST3
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