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

281
15 декабря 2016, 16:14

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

Answer 1

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

UPD

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

#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall

Обновление

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

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

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

int const someFunc()

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

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

Answer 2

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

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

READ ALSO
Баг компилятора при компилировании Bullet Physics

Баг компилятора при компилировании Bullet Physics

Сегодня наконец-то понял, как собрать программу! Нажал на кнопку и "БАЦ!", а компилятор жалуется на:

311
Почему не работает обычный delete?

Почему не работает обычный delete?

Вот в этом примере демонстрируется, как создать массив объектов, у которых конструктор принимает параметрыЕсли мы, как они рекомендуют, отделяем...

295
Почему с итераторами не сортируется и вылетает?

Почему с итераторами не сортируется и вылетает?

Помогите разобраться с итераторамиПочему с итераторами не сортируется и вылетает?

329
Алгорифм Маркова

Алгорифм Маркова

Подскажите, пожалуйста, встречали ли вы шаблоны к алгорифмам Маркова? Если да, то дайте ссылку на источник

293