Модификаторы функций и их отсутвие в языковом стандарте

Рейтинг: 0Ответов: 2Опубликовано: 23.11.2014

Почему в реализации компилятора есть функции с обратным вызовом с модификаторами (например APIENTRY, PASCAL и т.д.) а в языковом стандарте про модификаторы ничего не сказано?

Ответы

▲ 2Принят

Это не модификаторы и не ключевые слова, это макросы (обратите внимание на то, что они написаны капсом, как это принято для названий макросов). Если вы использвете Visual Studio, то узнать, в какой именно текст раскрываются эти макросы, вы можете, поставив на них курсор и нажав F12. Вообще у MS полным-полно таких макроссов, которые, разумеется, являются их собственным "изобретением", и не встречаются в других реализациях языка, а потому и в стандарте о них нет ни слова

UPD

Вышеперечисленные макросы в VS определяются следующим образом:

#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall

Обновление

ведь по языковому стандарту между именем и типом возвращаемого значения ничего не может быть

я не эксперт в C++ и всех тонкостей стандарта не знаю, однако сильно сомневаюсь, что вы правы.

Скажем вот такой объявление функции является вполне корректным, несмотря на то, что между int и и менем функции стоит модификатор const:

int const someFunc()

А на MSDN синтаксис __stdcall прямо говорит о том, что этот модификатор ставится между типом возвращаемого значения и именем функции

Более того, вот такой пример

▲ 1

Потому что архитектура x86 — странная. Именно она (то есть, компания Intel), а не прихоть разработчиков MSVC, определяет многообразие calling conventions.

Исторический экскурс: [1], [2], [3], [4], [5].