Большой Воронежский Форум
» Программирование>переменное число параметров.
xxx-men 18:17 02.10.2009
Код:
extern void f(int x, ...);

void main()
{

char a = 1;
char b = 2;
int c   = 3

f(0,a,b,c);
};
если это скомпилировать переменные запихиваются в стек как DWORD,
мне необходимо первые 2 засунуть как BYTE.

как сделать это средствами с++?

зы: естественно через _asm вставки все нормально. [Ответ]
Part!zan 18:51 02.10.2009
xxx-men, я че-то не понял твоей проблемы... Тебе кто-то мешает поместить в первый дворд твои байты? [Ответ]
A-Maverick 19:42 02.10.2009
мб так?
f(0,(byte)a, (byte)b,c);

Тоже не очень понял сути вопроса. [Ответ]
xxx-men 20:17 02.10.2009

Сообщение от Part!zan:
xxx-men, я че-то не понял твоей проблемы... Тебе кто-то мешает поместить в первый дворд твои байты?

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


Сообщение от A-Maverick:
мб так?
f(0,(byte)a, (byte)b,c);

(byte)a копилятор переводит в int, и кладет в стек 4 байта.

----------------------------------------------------------------------------

а вот еще такой вопрос: х86 процесор умеет делать push по одному байту? или только по 4? [Ответ]
A-Maverick 09:54 03.10.2009

Сообщение от xxx-men:
(byte)a копилятор переводит в int, и кладет в стек 4 байта.

Ну тогда я совсем не понимаю, с какого перепугу ваш компилятор переводит char в int. [Ответ]
Part!zan 12:34 03.10.2009

Сообщение от xxx-men:
первый дворд нужен совсем под другие цели.

Да какая разница, какой это по счету дворд? Пихай байты во второй дворд. Короче, туда, где они должны по твоему мнению, быть. [Ответ]
xxx-men 14:37 03.10.2009
типа вот так: f(0, ( a *256 + b) * 256 + LOWORD(c) , HIWORD(c) ); ? [Ответ]
Part!zan 17:33 03.10.2009
xxx-men, да хотя бы так. только я предпочел бы сдвиг вместо умножения. [Ответ]
Вверх