Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Про ссылки

356
26 октября 2002 года
molnij
159 / / 20.06.2000
Если я не ошибаюсь, то в C++ добавили такую гадость как ссылки (&). Объясните плиз как она работает. Ситуация:
funс(Type &a){
__asm{
mov eax,a.p//здесь передается не то что надо, а какая-то чушь
}
}
Создается впечатление, что вместо "a" передается "&a" - в смысле адрес.
Здесь Type - класс. По ходу появился еще один вопрос. А если Type это структура - пройдет или нет???
1.6K
29 октября 2002 года
GDragon
67 / / 11.10.2002
Вообще-то эта "гадость" входит в стандарт С уже давно. В функцию действительно передается не копия переменной, а ее адрес. А суть такова, что с таким аргументом я могу в функции работать как с переменной (а не ссылкой на нее):

...
void DoSomeThing(int &i)
{
...
i = 2+2; //а не *i = 2+2
...
}

Ну а структуры ты там передаешь, или классы - это все равно.
356
29 октября 2002 года
molnij
159 / / 20.06.2000
А почему тогда не работает приведенный пример - там в регистр пишется не значение переменной а непонятно что?, причем если сделать спец. переменную, то все проходит:

funс(Type &a){
int *vspom=a.p
__asm{
//mov eax,a.p//здесь передается не то что надо, а
mov eax,vspom//все работает
}
}

?????????????
476
29 октября 2002 года
man2002ua
218 / / 16.10.2002
[QUOTE]Originally posted by molnij
А почему тогда не работает приведенный пример - там в регистр пишется не значение переменной а непонятно что?, причем если сделать спец. переменную, то все проходит:

funс(Type &a){
int *vspom=a.p
__asm{
//mov eax,a.p//здесь передается не то что надо, а
mov eax,vspom//все работает
}
}

__asm{
mov ebx, [a.p];//компил. берет адрес переменной-ссылки (видимо таки глюк)
mov eax, [ebx];//получаем знач. по адресу
add eax,10; // изменяем
mov [ebx],eax; //заносим обратно
}
1.6K
29 октября 2002 года
GDragon
67 / / 11.10.2002
А ты уточни, правильно ли в блоке ASM интерпретируется запись с точкой, потому как в MSDN нигде не написано, что поддерживается такой C-шный синтаксис. Вот то, что поддерживается:
Symbols, including labels and variable and function names
Constants, including symbolic constants and enum members
Macros and preprocessor directives
Comments (both /* */ and // )
Type names (wherever a MASM type would be legal)
typedef names, generally used with operators such as PTR and TYPE or to specify structure or union members

Я вообще когда на ASM-е работал (еще под DOS), то компилил на ASM-е *.obj, а потом подключал к проекту и объявлял extern "C" функции.
476
29 октября 2002 года
man2002ua
218 / / 16.10.2002
интерпретация нипричем... если вы развернете EXE-шник дизасмом, то увидите, что сылка передается как все тот же указатель на переменную, но через стек. Если ваш код работает с такой ссылкой - компилятор сам решает, как работать с ней, а ассемблерная вставка - не знает - ей нужно подсказать, что это адрес. См. пример выше
356
29 октября 2002 года
molnij
159 / / 20.06.2000
Просто использование точки проходит - проверял.
То есть просто глюк компилера, да?
И скажите вот еще что. Нужно сделать работу с 32 битными регистрами для Borland C++ 3. Можно ли будет сделать так же: скомпилить *.obj например в Visual C++, а потом включить в проект Борланда; а как тогда быть с объявлениями класса??
1.6K
30 октября 2002 года
GDragon
67 / / 11.10.2002
Цитата:
Originally posted by molnij
Просто использование точки проходит - проверял.
То есть просто глюк компилера, да?
И скажите вот еще что. Нужно сделать работу с 32 битными регистрами для Borland C++ 3. Можно ли будет сделать так же: скомпилить *.obj например в Visual C++, а потом включить в проект Борланда; а как тогда быть с объявлениями класса??



Да я уж лет шесть на ASM-е не работал. Как там с классами - не знаю, не использовал, а функции писал: объявляешь процедуру и вытаскиваещь данные из стека, а в С объявляешь функцию как extern "C". Извини, подробнее не могу - позабыл уже, а старые свои записи где искать и не знаю. Поищи в Инете.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог