首页 > 解决方案 > API 函数可以初始化 const 全局变量吗?

问题描述

我编写了一个使用 const 全局变量的程序,我想知道是否可以通过在全局范围内、任何其他函数之外以及 main() 或 WinMain() 之外调用 Windows API 函数来初始化它。它是这样的:

#include "stdafx.h"
#include <iostream>
#include "windows.h"

const int i_HRes = GetSystemMetrics(SM_CXSCREEN);

int main()
{ std::cout << "Horizontal screen resolution: " << i_HRes << std::endl;
  std::cin.ignore();
  return 0;
}

它编译和运行没有错误,但我想知道在全局范围内调用 API 函数是否会导致消费者软件的某个地方出现问题。

标签: c++constants

解决方案


在您展示的示例中,这很好。i_hRes在可以调用 winapi 函数的上下文中调用隐式的、编译器生成的初始化代码。一般来说,当你的程序被允许做任何事情时,做 winapi 的事情是安全的。

但是,正如 Raymond 在评论中提到的那样,这是特定于您正在制作可执行程序的事实。如果您正在编写一个 DLL,那么调用外部函数可能是个坏主意。


推荐阅读