Что означают __cdecl и (void)? - PullRequest
0 голосов
/ 06 июня 2019

В настоящее время я программирую tcp / ip-сервер, используя WSA. После некоторого устранения неисправности мой друг сказал, что я должен использовать bool __cdecl winsock_server ( void ) вместо bool winsock_server().

Но он не объяснил мне, что __cdecl и (void) делают. Я уже знаю, что __cdecl меняет способ размещения аргументов в стеке на уровне ассемблера, но что означает (void)?

Я должен отметить, что я новичок в C ++. Я программировал только на C # и VB.NET.

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 06 июня 2019

__cdecl
Вы правильно поняли.Он обеспечивает соблюдение соглашения о вызове функций в c-style и, таким образом, вызывает функцию (как передаются аргументы, кто очищает стек).Кстати, это уже соглашение о вызовах по умолчанию.

(void) v / s ()
В C++ они эквивалентны (без аргументов).
В C однако первый означает отсутствие аргументов, а последний означает любое количество аргументов.Так что это может вызвать проблемы при повторном использовании файла заголовка для C.

0 голосов
/ 06 июня 2019

(void) означает, что у него нет аргументов. Это больше похоже на стиль кода. Вы можете использовать only (), но запись (void) явно показывает, что у функции нет аргументов.

...