Что означает "cdecl"? - PullRequest
       43

Что означает "cdecl"?

22 голосов
/ 14 февраля 2011

Да, я знаю, что "cdecl" - это название известного соглашения о вызовах, поэтому, пожалуйста, не объясняйте мне соглашения о вызовах. Я спрашиваю, что на самом деле означает сокращение (?) «Cdecl». Я думаю, что это плохой выбор именования, потому что на первый взгляд он напоминает «декларатор C» (довольно уникальный синтаксический аспект C). На самом деле, существует программа под названием cdecl , единственная цель которой - расшифровать C-деклараторы. Насколько я могу судить, синтаксис объявления C не имеет абсолютно никакого отношения к соглашениям о вызовах.

Упрощенная версия: "stdcall" означает "стандартное соглашение о вызовах". Что означает "cdecl"?

Ответы [ 4 ]

25 голосов
/ 14 февраля 2011

Это происходит от объявленной функции C (в отличие от функции C, которая не была объявлена, что было распространено в K & R C).

В то время, когда он сосуществовал с соглашением о вызовах Паскаля (когда вызываемый объект очищал стек), было целесообразно вызывать его после языка программирования.

Все, что вы когда-либо хотели знать о соглашениях о вызовах.

11 голосов
/ 14 февраля 2011

C декларация. Декларация, представленная / для C.

[редактировать]

Я, честно говоря, должен признать, что на самом деле не знаю, означает ли это то, что означает, хотя на самом деле это вводится для / для C. Но поскольку caller должен очистить выделенную память (в отличие от большинства других соглашения о вызовах). Это также может быть мнемоника для «Caller Does End CLeaning», которая, на мой взгляд, является хорошим помощником в памяти. : D

9 голосов
/ 14 февраля 2011

Вы слишком много читаете об этом.Это обозначает соглашение о вызовах реализации для вызова функций C в целом (но особенно важно для varargs).

Это не должно быть аббревиатурой для чего-то, что объединяет «C» и «объявление»;имена - это просто имена, особенно в программировании.Мнемоника помогает, но хотя «malloc» означает «выделить память», она имеет дополнительное значение, которое мы знаем и привязываем к ней;«alloca» также «выделяет память», например.

Или взять «struct», которая «означает« структуру », но« структура »сама по себе настолько универсальна, что без значения, которое мы подсознательно приписываем»struct "мы были бы безнадежно потеряны - поскольку новые программисты, все еще изучающие терминологию, часто теряются.

2 голосов
/ 14 февраля 2011

Обновлено Я полностью пересмотрел это, после того, как комментарии указали, насколько я был неправ. cdecl означает, что эта функция использует то же соглашение о вызовах, что и функции C. extern "C" означает, кроме того, что имя функции не должно подвергаться C++ изменению имени.

А почему он называется cdecl, я больше не знаю.

...