У меня есть val.h
файл исходного кода с глобальной переменной с внутренней связью и встроенной функцией, которая возвращает его адрес:
// val.h
#pragma once
static int val;
inline int* get_val()
{
return &val;
}
Тогда этот заголовок включен в две разные единицы перевода. Если я вызываю &val
в обоих этих единицах, я получаю два разных адреса, и это нормально, так как val
имеет внутреннюю связь, и у каждого блока перевода есть свой val
. Но если я позвоню get_val()
в обоих этих единицах, я получу два одинаковых адреса.
Гарантируется ли такое поведение стандартом, всегда ли мы получим одно и то же значение, возвращаемое вызовом get_val()
из любой единицы перевода?
А что если компилятор решит выполнить истинное встраивание, то есть просто заменить вызов get_val()
на оператор &val
в каждой единице перевода. Получим ли мы в этом случае разные адреса для каждой единицы перевода?