![]() |
|
Программирование >> Расширенная версия языка c++
![]() 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. В этом фрагменте в функцию вставляется несколько ассемблерных инструкций:
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |