在我的
Memory.hpp
文件中,我有一个名为 isMHinit
: 的名称空间布尔值
namespace Memory
{
static bool isMHInit = false;
DWORD HookFunction(LPVOID pTarget, LPVOID pDetour, LPVOID pTrampoline, BOOL isWriteCopy);
static UINT64 CheckCodeAccess(UINT64 startaddress);
DWORD OnAccessHookFunction(PVOID pTarget, LPVOID pDetour, LPVOID pTrampoline, BOOL isWriteCopy);
}; // namespace Memory
在
Memory.cpp
里面,我使用并修改了它:
// this function is a member of Memory, I removed most functionality for brevity.
DWORD HookFunction(LPVOID pTarget, LPVOID pDetour, LPVOID pTrampoline, BOOL isWriteCopy)
{
if (!isMHInit) {
if (MH_Initialize() != MH_OK) {
std::cout << "Error: MHInit failed." << "\n";
return 1;
}
isMHInit = true;
}
在执行 clang-tidy 时,我收到此警告,即使我在函数内明确修改了它:
变量“isMHInit”是非常量且全局可访问的,请考虑将其设为常量
这是 clang-tidy 的问题吗?还是我应该修改代码中的某些内容?
永远不应该在标头中声明变量
static
(当它不是类成员时)。当标题包含
static bool isMHInit = false;
这意味着包含标头的每个源文件中都有一个单独的变量
isMHInit
。如果你想在所有源文件之间共享一个全局可访问的变量,你可以将其声明为
inline bool isMHInit = false;
但是,使用非常量全局可访问变量是糟糕的设计,Clang-tidy 会警告您这一点。
如果您实际上仅在单个源文件中使用该变量,则保持声明不变,但将其移动到源文件中。这使得设计更好一点。