Image

Imagem_a_m_o_n wrote in Imageru_cpp

Category:

Упаковка фактический параметров

У меня есть немножно кода который работает под Linux но под Windows нет.
Код использует stdlib и ещё кое что, всё стандартное.
Компилярот gcc 4.3 (под windows версия MinGW).

Основная проблема при упаковке параметров.
Например формальный параметр может быть типа int64_t, фактический long и наоборот.

Почему то параметры при вызове функции упаковываются в то количество байт
которое занимают передаваемые переменные а не в то которое декларировано для функции.

т.е. foo(uint64_t,uint64_t) при вызове foo(1,2) в перовом параметре получит содержимое
восьми байтов в которых хранятся целые 1 и 2 соответственно, во втором параметре буте мусор.
Вызов foo((uint43_t)1,(uint43_t)2) отрабатывает корректно.

Вопрос: есть ли какие либо параметры компилятора или способ определения прототипа функции,
позволяющие контролировать соответствие размера передаваемых параметров.