реклама на сайте
подробности

 
 
> Одна процедура - два имени, фича, при создании библиотек.
SasaVitebsk
сообщение Mar 9 2008, 23:40
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



При создании библиотек (для собственных нужд) столкнулся с проблемкой.

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

В одной из библиотек есть 2 ф-ции.

Код
void a(int x, int y);
void b(int x, int y);


В другой библиотеке обе ф-ции выполняются с помощью одной, поэтому в реализации написано так

Код
void b(int x, int y)
{
   a(x,y);
}


Компилятор при этом честно генерит:
Код
b: rcall a
    ret


И никакая оптимизация не помогает.
Макроопределениями пользоваться нехочу. Как сделать чтобы компилятор вместо вызова одной подставлял обращение к другой. Фактически, чтобы он сделал бы две метки (при компиляции программы) на одну процедуру?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Mar 10 2008, 00:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Пользуйтесь вызовом функции по указателю. Чтобы вызвать ту или другую функцию достаточно сменить значение указателя.
P.S. правда этот способ ведет к небольшому увеличению расхода памяти, т.к. для указателя нужна переменная.
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Mar 10 2008, 08:40
Сообщение #3


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(rezident @ Mar 10 2008, 02:02) *
Пользуйтесь вызовом функции по указателю. Чтобы вызвать ту или другую функцию достаточно сменить значение указателя.
P.S. правда этот способ ведет к небольшому увеличению расхода памяти, т.к. для указателя нужна переменная.

Стойте, я в этом не разобрался и для себя хочу уяснить, это же не C++ и расход будет далеко не только на указатель. А функция альтернативная где будет лежать? Если есть массив указателей и обращение только к одной из них поймет ли компилятор, что вторую не нужно помещать во флешь? Даже если в программе обращение только к одной. А если и поймет - то каждый ли? Где это стандартизированно?

To: SasaVitebsk
по-моему Страуструп сказал, что внутри С++ живет особый язык которым и нужно пользоваться, т.е. не сочетать все его механизмы как попало, ибо это далеко не то, что заложил в него его создатель. Так и к C это подходит. Зачем так усложнять простые вопросы? Я бы пользовался препроцессором. Ну а может Вам применить стандартные шаблоны С++ - это вобщем-то то что Вы хотите, только в нужном месте и в нужное время. Кстати, помнится когда-то GCC C++ генерил сначала кодс C, вот интересно как там выглядели шаблоны. Может это можно найти в каких-то старинных манускриптах по GCC.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 14:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.02068 секунд с 7
ELECTRONIX ©2004-2016