C++ 可以/应该C++#pragma预处理器驻留在函数中

C++ 可以/应该C++#pragma预处理器驻留在函数中,c++,winapi,linker,pragma,common-controls,C++,Winapi,Linker,Pragma,Common Controls,简言之,我想制作一个函数,嵌入视觉样式清单,并链接到ComCtl32.lib,版本6(如果可用)。以下是我希望做的事情: void InitVivify() { // Embed visual style XML manifest #pragma comment(linker, \ "\"/manifestdependency:type='Win32'" \ " name='

简言之,我想制作一个函数,嵌入视觉样式清单,并链接到
ComCtl32.lib
,版本6(如果可用)。以下是我希望做的事情:

void InitVivify() {
    // Embed visual style XML manifest
    #pragma comment(linker,                           \
        "\"/manifestdependency:type='Win32'"          \
        "   name='Microsoft.Windows.Common-Controls'" \
        "   version='6.0.0.0'"                        \
        "   processorArchitecture='*'"                \
        "   publicKeyToken='6595b64144ccf1df'"        \
        "   language='*'\""                           \
    )

    // Link common controls library
    #pragma comment(lib, "ComCtl32.lib")

    // Initialize controls used
    INITCOMMONCONTROLSEX InitCtrlEx;
    InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
    InitCtrlEx.dwICC = ICC_LISTVIEW_CLASSES | ICC_TAB_CLASSES | ICC_USEREX_CLASSES;
    InitCommonControlsEx(&InitCtrlEx);
}

我意识到这可能不是一个好的做法,但它有效吗

Pragma指令是预处理器指令。
它们使实现以实现定义的方式运行。
因此,它是有效的,但不受鼓励

C++11标准:

16.6 Pragma指令[cpp.Pragma]

1表单的预处理指令

# pragma pp-tokensopt new-line
使实现以实现定义的方式运行。该行为可能导致翻译失败,或导致翻译器或生成的程序以不一致的方式运行。任何未被实现识别的杂注都将被忽略


Pragma指令是预处理器指令。
它们使实现以实现定义的方式运行。
因此,它是有效的,但不受鼓励

C++11标准:

16.6 Pragma指令[cpp.Pragma]

1表单的预处理指令

# pragma pp-tokensopt new-line
使实现以实现定义的方式运行。该行为可能导致翻译失败,或导致翻译器或生成的程序以不一致的方式运行。任何未被实现识别的杂注都将被忽略

啊,我明白了,预处理器应该是我的提示。每个预处理器都会被无规则地评估,因为它在编译开始之前。因此,即使将其放入函数中也可以完成,但它不会给我想要的行为。我打算将此函数作为静态库的一部分,以便其他人可以链接到它并调用该函数,从而
ComCtl32.lib
将在他们的程序中链接。但从你告诉我的,我可以看到,最有可能的不是它将如何工作。啊,我明白了,预处理器应该是我的提示。每个预处理器都会被无规则地评估,因为它在编译开始之前。因此,即使将其放入函数中也可以完成,但它不会给我想要的行为。我打算将此函数作为静态库的一部分,以便其他人可以链接到它并调用该函数,从而
ComCtl32.lib
将在他们的程序中链接。但从你告诉我的,我可以看出,最有可能的不是它将如何工作。