将INT分配为INT并分配给SHORT - 在一种情况下可能?

时间:2013-10-17 07:09:17

标签: c winapi windows-console

我手动计算Windows控制台中的单元格数。 (是的,我知道这些信息可以从填充的CONSOLE_SCREEN_BUFFER_INFO结构中获得。)

#include <windows.h>
#include <stdio.h>

int main(void)
{
    HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    RECT workarea;
    COORD c;

    SystemParametersInfoW(SPI_GETWORKAREA, 0, &workarea, 0);
    printf("Rectangle: %ld x %ld\n", workarea.right, workarea.bottom);
    c.X = workarea.right / 8;
    c.Y = workarea.bottom / 12;
    printf("Cells: %d x %d\n", c.X, c.Y);

    return 0;
}

RECT workarea是一个包含四个长整数的结构。 COORD c是一个有两个短整数的结构。

当将长整数除以整数(例如8或12,如上所述)时,是否存在将结果常量赋值为短整数的问题? Visual Studio 2012会产生预期的编译时警告。

但在测试此特定情况时,SystemParametersInfoW(SPI_GETWORKAREA, 0, &workarea, 0)仅提供RECT workarea桌面分辨率减去任务栏高度(例如1680 x 1010像素)。

这些数字当然在短整数范围内。所以,我想问题是:在这种特殊情况下是否存在数据丢失的可能性?

1 个答案:

答案 0 :(得分:1)

当您将longint分开时,结果将包含数据类型long(两者中较大者)。 如果,结果适合short,那么在将结果分配给short时不会有数据丢失。