Модификаторы signed
, unsigned
, long
, short
могут применяться только к ключевым словам, обозначающим встроенные типы. Они не могут быть применены к типу имени, который является псевдонимом для встроенного типа: синтаксис C не позволяет этого.
Что касается того, что вы можете сделать, я думаю, что ответ Mysticial охватывает это. Изменение размера int
будет конфликтовать с любым ABI, который компилятор использует для выполнения библиотечных и системных вызовов, поэтому вы не сможете сделать это без поддержки компилятора. Например, предположим, что у вас есть функция, объявленная следующим образом:
int foo(int a);
Если вы замените все упоминания int
на short
в TU, который вызывает эту функцию, но не в TU, который ее реализует, то вызывающая сторона передаст и получит short
, тогда как реализация функции ожидает и возвращает int
. Это не обязательно будет работать. Вам нужно, чтобы все библиотеки, включая стандартные библиотеки и любые системные вызовы, которые они делают, были скомпилированы так, чтобы вызывающий и вызываемый абоненты соглашались, что такое int
.
Одним из вариантов, конечно, является изменение всего кода, который вы тестируете, использование макросов вместо int
, unsigned int
и так далее. Тогда любые объявления функций в заголовках оставляются в покое. Будут неявные преобразования, когда типы не будут совпадать, что может вызвать предупреждения компилятора и усекать значения, но, по крайней мере, имеет определенное поведение. По сути это внедрение зависимостей через препроцессор.