Я столкнулся с интересным случаем, читая другие коды.Разница между встроенной функцией и статической встроенной функцией при доступе к статической переменной
В-файле, определяется статическая переменная и встраиваемая функция упрощается следующим образом:
static int ply;
inline int WTM(){return ply;}
и функция вызывается в какой-либо другой cpp
файл, который включает эту головку.
cout << ply << " " << WTM();
Самое странное в том, что в том, где эта функция вызывается, переменная ply
внутри этой инлайн функции имеет различное значение из одной и той же переменной непосредственно перед ним вне функции.
Выходной сигнал 0 1;
Я проверил весь файл, и оба ply
и WTM()
просто имеют это единственное определение.
После этого я изменил код на следующее:
static int ply;
static inline int WTM(){return ply;}
Два значения стали одинаковыми.
Мой компилятор: g++ (GCC) 4.4.7
с настройками по умолчанию.
Я искал об этом явлении и добраться до этого два звена: Difference between an inline function and static inline function и http://gcc.gnu.org/onlinedocs/gcc/Inline.html , но до сих пор не понимаю, почему это могло произойти (особенно, почему они могут иметь разные значения в первой ситуации). Интересно, может ли кто-нибудь сказать мне, как компилятор расширит эти два фрагмента кода (я пробовал использовать -E
, но, похоже, он не работает над встроенной функцией).
Я не понимаю, откуда приходит «1». Независимо от области действия, это должно быть 0. – starmole
@starmole I * guess * есть назначение в одной единицы перевода. –
Да, на самом деле есть много других заданий. –