有没有办法为函数创建预处理器宏?

dev*_*urs 2 c++ macros winapi c-preprocessor

是否可以根据函数结果创建C++预处理器宏?

例如,我想在预处理器宏定义中动态保存屏幕高度:

#define SCREEN_HEIGHT   GetSystemMetrics(SM_CYVIRTUALSCREEN)
Run Code Online (Sandbox Code Playgroud)

然后我想使用结果根据屏幕高度设置值:

#if SCREEN_HEIGHT < 1200
    #define TOP_COORD     200
    #define BOTTOM_COORD  500
    #define LEFT_COORD    0
    #define RIGHT_COORD   1280
#else
    #define TOP_COORD     1100
    #define BOTTOM_COORD  1400
    #define LEFT_COORD    0
    #define RIGHT_COORD   1280
#endif
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为SCREEN_HEIGHT似乎没有得到正确定义.

有没有更好的方法来实现这一目标?这甚至可能吗?我希望能够在头文件中获得此屏幕高度信息(如果可能),因为这是大量遗留代码的一部分.

Jam*_*nze 5

在编译时,宏在编译时完全评估,至少是由预处理器在实际代码编译之前,并且表达式#if等必须是预处理器表达式.在程序运行之前,无法知道屏幕的高度.