Напримеркак подписываются голец и короткий передается в качестве параметра в конвенции Cdecl вызова
int foo(short x);
short s = -1;
foo(s);
ли это так же, как
//int foo(short x); //Updated
int foo(signed x);
short s = -1;
foo((signed)s);//sign-extend and push to stack
Или же, как
//int foo(short x); //Updated
int foo(unsigned)
short s = -1;
foo((unsigned)(unsigned short)s);//zero-extend and push to stack
Или как ОК (мы рассматриваем высокие биты как грязные)?
Я могу сделать некоторый эксперимент над специальным компилятором. Но я не уверен, что все это одно и то же подробно. Мне просто нужно какое-то официальное обещание.
Какая разница в деталях реализации компилятора? Вы не должны ничего делать с этими высокими битами, просто считайте их неопределенными. – DCoder
@DCoder: Это важно, если вы пишете на других языках, которые должны взаимодействовать с подпрограммами C или если вы пишете реализацию C, которая должна взаимодействовать с другими реализациями C. –
Вы говорите, что, если прототипом функции является 'int foo (short x) '?, Вы думаете, что число, большее, чем' short', переводится в стек? Почему это так? – Floris