Программирование >>  Расширенная версия языка c++ 

1 ... 131 132 133 [ 134 ] 135 136 137 ... 227



1. В примере 3, если спецификатор explicit указать только для конструктора myclass (int), можно ли будет выполнить неявное преобразование также и для конструктора myclass(char *)? (Подсказка: попробуйте и посмотрите, что получится.)

2. Работоспособен ли следующий фрагмент программы? \<-class Demo { , .. .,

double XI

public: --

Demo {double i) ( x }

...

Demo counter =10; . . .-,

3. Попытайтесь оправдать введение ключевого слова explicit. (Другими словами, объясните почему неявное преобразование конструкторов в некоторых случаях может оказаться нежелательным.)

13.6. Спецификаторы сборки и ключевое слово asm

В C++ поддерживаются два важных механизма для облегчения связи C++ с другими языками программирования. Первым является спецификатор сборки (linkage specifier), который сообщает компилятору, что одна или более функций вашей программы на C++ будет компоноваться с другим языком программирования, который может иметь другие соглашения о передаче параметров процедуре заполнения стека и т. д. Вторым является ключевое слово asm, которое позволяет вставлять в исходную профамму команды ассемблера. Оба этих механизма рассматриваются в этом разделе.

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

cou Obl.getaO endl; i

cout оЬ2: ob2.geta() endl; Г

return 0; -li; --oX



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

основная форма:

extern язык { -...(.- . . 1 -У:: У

Все спецификаторы сборки должны быть глобальными; их нельзя задавать внутри функций.

Чаще всего в программы на C++ приходится вставлять фрагменты программ на С. Путем задания сборки с С вы предотвращаете искажения (mangling)

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

функции обычно сопутствует некоторая информация о ее типе. С другой

стороны, так как язык С не поддерживает ни перегрузки функций, ни функций-членов, он не может распознавать имена функций, искаженные информацией об их типе. Указание компилятору необходимости сборки с

С позволяет решить проблему.

Хотя вполне возможно совместно компоновать ассемблерные подпрофаммы с программами на C++, часто легче использовать язык ассемблера в процессе написания программ на C++. В C++ поддерживается специальное ключевое слово asm, позволяющее вставлять ассемблерные инструкции в функции C++. Преимущество встроенного ассемблера в том, что ваша программа

полностью компилируется как программа на C++, и нет необходимости раздельно с ней компилировать, а затем совместно компоновать ассемблерные файлы. Здесь показана основная форма ключевого слова asm:

asm < ас ияструк1ргАг ) ; г. - -- nj.,

где - это ассемблерная инструкция, которая будет встроена

в вашу программу.

Важно отметить, что в некоторых компиляторах поддерживаются следующие три, несколько иные формы инструкции asm:

asm а.с 11шструк1щя;

asm ас физячвсхий конец строхя

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

exter прототал функции; -



410 Самоучитель ..C++

asm { -i ; . i TiTOiU

яосявдовлтвлшость лссаыблвртж ннструкцям , >/-

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

, Вшечанмй

S среде программирования Microsoft Visual C++ для встраивания ассемблерного кода используется инструкция asm. So всем остальном эта инструкция аналогична только что описанной инструкции asm. ..

Примеры,

1. В этой программе функции с() компонуется не как функция C++, а как функция С:

Демонстрации икатора сборки ,

ttinclude <iQstream> : ; : .i.. , с ji-

using namespace std; , . . .

extern c (int X) ; компонуется как функция С . ,

Теперь функция компонуется как функция С. . -

int func (int х) . : ; .Л--

( 14 i. .. .: - .. . - . . -j. -

return x/3; . ,;*

Теперь эта функция может компоноваться с программой, которая компилировалась компилятором С.

2. В представленной ниже программе компилятору сообщается, что функции П(), 12() и f3() должны компоноваться как функции С:

extern С {

void fl О ; 1- ... .: ... . :

int f2(int х>; .

double f3 (double X, int *p) ; . :

3. В этом фрагменте в функцию вставляется несколько ассемблерных

инструкций:



1 ... 131 132 133 [ 134 ] 135 136 137 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика