Тестовый пример:
Цитата(n1.cpp)
Код
namespace n1 {
int flags;
}
Цитата(n2.cpp)
Код
namespace n2 {
int flags;
}
Цитата(main.cpp)
Код
namespace n1 {
extern int flags;
}
namespace n2 {
extern int flags;
}
volatile int a;
int main()
{
a = n1::flags;
a = n2::flags;
return 0;
}
Что видим в листинге (взят тулчейн для AVR, с ARM то же самое):
Цитата(main.s90)
Код
`?<Name n1 0>` SYMBOL "n1"
flags SYMBOL "flags", `?<Name n1 0>`
EXTERN flags
...
RSEG CODE:CODE:NOROOT(1)
// 13 int main()
main:
// 14 {
// 15 a = n1::flags;
LDI R30, LOW(flags)
LDI R31, (flags) >> 8
LD R16, Z
LDD R17, Z+1
LDI R30, LOW(a)
LDI R31, (a) >> 8
ST Z, R16
STD Z+1, R17
// 16 a = n2::flags;
LDI R30, LOW(flags)
LDI R31, (flags) >> 8
LD R16, Z
LDD R17, Z+1
LDI R30, LOW(a)
LDI R31, (a) >> 8
ST Z, R16
STD Z+1, R17
// 17 return 0;
LDI R16, 0
LDI R17, 0
RET
// 18 }