Выбрать главу

asm инструкция;

asm инструкция newline

asm {

 последовательность инструкций

}

Здесь элемент инструкция означает любую допустимую инструкцию языка ассемблера. Поскольку использование инструкции asm зависит от конкретной реализации среды программирования, то за подробностями обратитесь к документации, прилагаемой к вашему компилятору.

На момент написания этой книги в среде Visual C++ (Microsoft) для встраивания кода, написанного на языке ассемблера, предлагалось использовать инструкцию _ _asm. Во всём остальном этот формат аналогичен описанию инструкции asm.

Осторожно! Для использования инструкции asm необходимо обладать доскональными знаниями языка ассемблера. Если вы не считаете себя специалистом по этому языку, то лучше пока избегать использования инструкции asm, поскольку неосторожное ее применение может вызвать тяжелые последствия для вашей системы.

Спецификация компоновки

Спецификатор компоновки позволяет определить способ компоновки функции.

В C++ можно определить, как функция связывается с вашей программой. По умолчанию функции компонуются как С++-функции. Но, используя спецификацию компоновки, можно обеспечить компоновку функций, написанных на других языках программирования. Общий формат спецификатора компоновки выглядит так:

extern "язык" прототип_функции

Здесь элемент язык означает нужный язык программирования. Все С++-компиляторы поддерживают как С-, так и С++-компоновку. Некоторые компиляторы также позволяют использовать спецификаторы компоновки для таких языков, как Fortran, Pascal или BASIC. (Эту информацию необходимо уточнить в документации, прилагаемой к вашему компилятору.)

Следующая программа позволяет скомпоновать функцию myCfunc() как С-функцию.

#include <iostream>

using namespace std;

extern "C" void myCfunc();

int main()

{

 myCfunc();

 return 0;

}

// Эта функция будет скомпонована как С-функция.

void myCfunc() {

 cout << "Эта функция скомпонована как С-функция.\n";

}

На заметку. Ключевое слово extern — необходимая составляющая спецификации компоновки. Более того, спецификация компоновки должна быть глобальной; ее нельзя использовать в теле какой-либо функции.

Используя следующий формат спецификации компоновки, можно задать не одну, а сразу несколько функций.

extern "язык" {

 прототипы_функций

}

Спецификации компоновки используются довольно редко, и вам, возможно, никогда не придется их применять. Основное их назначение — позволить применение в С++-программах кода, написанного сторонними организациями на языках, отличных от C++.

Операторы указания на члены ".*" и "->*"

Операторы указания на член позволяют получить доступ к члену класса через указатель на этот член.

В C++ предусмотрена возможность сгенерировать указатель специального типа, который "ссылается" не на конкретный экземпляр члена в объекте, а на член класса вообще. Указатель такого типа называется указателем на член класса (pointer-to-member). Это — не обычный С++-указатель. Этот специальный указатель обеспечивает только соответствующее смещение в объекте, которое позволяет обнаружить нужный член класса. Поскольку указатели на члены — не настоящие указатели, к ним нельзя применять операторы "." и "->". Для получения доступа к члену класса через указатель на член необходимо использовать специальные операторы ".*" и "->*".

Если идея, изложенная в предыдущем абзаце, вам показалась немного "туманной", то следующий пример поможет ее прояснить. При выполнении этой программы отображается сумма чисел от 1 до 7. Здесь доступ к членам класса myclass (функции sum_it() и переменной sum) реализуется путем использования указателей на члены.

// Пример использования указателей на члены класса.