2016-10-18 5 views
1

Быстрый простой вопрос (почти раритет):Почему система принимает без предупреждения 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; 
} 
+0

Можете ли вы показать нам, что вы говорите, с образцом фактического кода? –

+0

уже отредактирован. Мой вопрос заключается в том, почему он принимает передачу длинного int функции, которая предположительно получает только int. – Miguel

+0

Это потому, что у вас есть неявные целые преобразования. –

ответ

2

Скорее всего, это потому, что вы не включили эту функцию в вашем компиляторе. Например, с помощью GCC с предупреждениями конверсионных включена дает:

предупреждение: преобразование в «межд» от «длинный ИНТ» может изменить его значение

Если возникает вопрос, почему такие предупреждения не включены по умолчанию это связано с тем, что многие очень распространенные шаблоны кода создают большое количество ложных предупреждений из-за автоматических рекламных акций. Например, unsigned char p[10]; ... p[1] ^= 1;.

+1

Я склонен читать ваши статьи о глобальных денежных средствах, валютах, финансовых преступлениях. Очень редко я вижу такие вещи, которые заставляют меня понять, что есть люди, которые думают. –

 Смежные вопросы

  • Нет связанных вопросов^_^