My scenario is the following (it worked in clang but not in gcc)
liba.hpp:
inline int MY_GLOBAL = 0;
libother.cpp: (dll)
#include "myliba.hpp"
void myFunc() {
//
MYGLOBAL = 28;
}
someexe.cpp:
RunAppThatUsesBothLibAandLibOther();
The problem is that the inline variable was showing 0 in places where I expected 28 because it was alrady modified at run-time. MSVC disagrees with this, but clang does the thing I would expect.
The question is: can inline variables be modified at run-time in my scenario? (I solved the problem by de-inlining the variable.)
A static member variable (but not a namespace-scope variable) declared constexpr is implicitly an inline variable.
A variable declared inline has the same semantics as a function declared inline: it can be defined, identically, in multiple translation units, must be defined in every translation unit in which it is used, and the behavior of the program is as if there was exactly one variable.
inline variable is initialized more than once.
The Inline refactoring lets you reverse the Extract refactoring for a method , constructor, parameter, superclass, anonymous class, and variable. You can inline the pattern variable since the Java 14 version. In this case, all the occurrences will be replaced with old-style cast expression.
Yes, inline
variables can be modified after initialization.
However, DLLs are strange things on Windows with MSVC. To a close approximation, each DLL is modelled as its own C++ program, with an entirely independent runtime. Therefore, there is one copy of your inline
variable for the main program, and another for the DLL.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With