[c++] C ++ 17에서 초기화 후 인라인 변수를 변경할 수 있습니까?

내 시나리오는 다음과 같습니다 (clang에서는 작동하지만 gcc에서는 작동하지 않음)

liba.hpp :

inline int MY_GLOBAL = 0;

libother.cpp : (dll)

#include "myliba.hpp"

void myFunc() {
    //
    MYGLOBAL = 28;
}

someexe.cpp :

RunAppThatUsesBothLibAandLibOther();

문제는 인라인 변수가 런타임에 과도하게 수정되어 28을 예상 한 위치에서 0을 표시한다는 것입니다. MSVC는 이에 동의하지 않지만 clang은 내가 기대하는 것을 수행합니다.

문제는 내 시나리오에서 런타임에 인라인 변수를 수정할 수 있습니까? (변수를 인라인하여 문제를 해결했습니다.)



답변

예, inline초기화 후에 변수를 수정할 수 있습니다.

그러나 DLL은 Windows에서 MSVC가있는 이상한 것입니다. 근사치로, 각 DLL은 완전히 독립적 인 런타임을 가진 자체 C ++ 프로그램으로 모델링됩니다. 따라서 inline주 프로그램에 대한 변수 사본 과 DLL에 대한 사본이 있습니다 .


답변