Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Ты слишком много читаешь. Он выступает за вызывающее соглашение реализации для вызова функций C вообще (но особенно важно с varargs).

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

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

Ответ 2

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

В то время, когда он сосуществовал с соглашением о вызове pascal (когда вызывающий освободил стек), поэтому было бы разумно называть его после языка программирования.

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

Ответ 3

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

[править]

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

Ответ 4

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

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