0

我正在手动计算 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 像素)。

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

4

1 回答 1

1

当您将 along与a 相除时int,结果将具有数据类型long(两者中较大的一个)。如果结果适合 ashort那么将结果分配给 a 时不会丢失数据short

于 2013-10-17T07:13:38.093 回答