Шаг 84.
Использование ассемблера с языками высокого уровня. Согласование имен

    На этом шаге мы рассмотрим проблему согласования имен.

    Согласование вызовов, как мы убедились, снято с повестки дня, а вот согласование имен год от года только усложнялось. Кое-что вы уже знаете. Транслятор MASM, как известно, добавляет в конце имени @N, где N - количество передаваемых в стек параметров. То же делает и компилятор Visual C++. Таким образом, трудности возникают уже при согласовании двух ассемблерных модулей. В этом смысле TASM является более гибким компилятором, т.к. при желании к любому имени можно добавить @N, тем самым согласовав имена.

    Другая проблема - подчеркивание перед именем. Транслятор MASM генерирует подчеркивание автоматически, если в начале программы устанавливается тип вызова stdcall (Standart Call, стандартный вызов). Транслятор TASM этого не делает, следовательно, при необходимости это нужно делать прямо в тексте программы, что, на наш взгляд, является положительным моментом. Интересно, что между фирмами Borland и Microsoft здесь полное несоответствие.

    Еще одна проблема - согласование заглавных и прописных букв. Как вы помните, при трансляции с помощью TASM мы используем ключ /ml как раз для того, чтобы различать буквы прописные и заглавные. Транслятор MASM делает это автоматически. Как известно, и в стандарте языка C с самого начала предполагалось различие между заглавными и прописными буквами. В Паскале же прописные и заглавные буквы не различаются. В этом есть своя логика: Турбо Паскаль и Delphi не создают стандартных объектных модулей, зато могут подключать их. При создании же динамических библиотек туда помешается имя так, как оно указано в заголовке процедуры.

    Наконец последняя проблема, связанная с согласованием имен, - это уточняющие имена в C++. Дело в том, что в С++ возможна так называемая перегрузка. Это значит, что одно и то же имя может относиться к разным функциям. В тексте программы эти функции различаются по количеству и типу параметров и типу возвращаемого значения. Поэтому компилятор C++ автоматически делает в конце имени добавку - так, чтобы разные по смыслу функции различались при компоновке. Разумеется, фирмы Borland и Microsoft и тут не пожелали согласовать свои позиции и делают в конце имени совершенно разные добавки. Обойти эту проблему не так сложно, нужно использовать модификатор EXTERN "С".

    На следующем шаге мы рассмотрим проблему согласования параметров.




Предыдущий шаг Содержание Следующий шаг