c++ - 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 函数是否会导致消费者软件的某个地方出现问题。
解决方案
在您展示的示例中,这很好。i_hRes
在可以调用 winapi 函数的上下文中调用隐式的、编译器生成的初始化代码。一般来说,当你的程序被允许做任何事情时,做 winapi 的事情是安全的。
但是,正如 Raymond 在评论中提到的那样,这是特定于您正在制作可执行程序的事实。如果您正在编写一个 DLL,那么调用外部函数可能是个坏主意。
推荐阅读
- maven-surefire-plugin - 未能执行目标 org.apache.maven.plugins:maven-surefire-plugin 2:22.2
- amazon-web-services - python s3fs中的配置文件参数
- input - 悬停输入元素,这会影响占位符
- cron - 通过 cron 的 PHP 脚本未找到代码中调用的文件
- react-native - 用于不变循环的反应钩子 - 可以接受吗?
- android - 无法反序列化对象。类未定义无参数构造函数。如果您使用 ProGuard,请确保未剥离这些构造函数
- r - 正则表达式查找带有可选“final”点的字符串(仅此而已)
- foreach - 从另一个数组原型 forEach 中移除事件监听器
- flutter - 在动画期间重建称为更改选项卡
- javascript - 将对象属性更改/映射为枚举值