Быстрый простой вопрос (почти раритет):Почему система принимает без предупреждения long int передается как аргумент int?
Если я заявляю, например, в программе long int
C++, а затем вызвать его в функцию, принимая int
, я знаю, что он будет работать без каких-либо проблем, если я не дам его значение размера 4 байта, которое приведет к плохому печатающему контенту.
Однако меня удивляет то, что он никоим образом не предупреждает об этом. Если я объявляю 4 байта long int
, система знает, что у него есть 32 бита, чтобы сохранить это значение. Но тогда, если я передаю тот же самый long int
функции, где он вызывает только int
(2 байта), я предполагаю, что я использую 16 бит в памяти, которые не должны использоваться этим значением.
Я прав? Или он будет использовать только самые младшие 16 бит из этого long int
, полученных в качестве аргумента? Каков процесс здесь?
Пример кода:
#include <stdio.h>
void test(int x) // My question is why it accepts this?
{
printf("%d", x);
}
int main()
{
long int y=4294967200; // 32 bits
test(y);
return 0;
}
Можете ли вы показать нам, что вы говорите, с образцом фактического кода? –
уже отредактирован. Мой вопрос заключается в том, почему он принимает передачу длинного int функции, которая предположительно получает только int. – Miguel
Это потому, что у вас есть неявные целые преобразования. –