Nazwy zmiennych nie muszą być w ogóle zapisywane! Kompilator może się ich całkowicie pozbyć. Wyobraź sobie, jeśli kompilator jest dość sprytny, może to zmniejszyć całego programu to:
int main(){
return 0;
}
Należy pamiętać, że efekt tego programu jest dokładnie taka sama jak oryginału, a teraz nie ma zmienne w ogóle! Nie ma potrzeby nazywania ich teraz, prawda?
Nawet jeśli zmienne w kodzie były rzeczywiście używane, ich nazwy są czysto wygodnym zapisem podczas pisania programu, ale nie są potrzebne procesorowi podczas wykonywania kodu. Jeśli chodzi o mikroprocesor jest zaniepokojony, funkcję tak:
int foo(int x, int y) {
int z = x + y;
return z * 2;
}
może spowodować skompilowanego kodu, który robi to w jakimś hipotetycznym prostego zestawu instrukcji architektury (ISA):
ADD # consumes top two values on stack (x and y), pushes result (z)
PUSH 2 # pushes 2 on stack
MULT # consumes top two values on stack (z and 2), pushes result
RET
Im dłuższa historia jest to, że nazwy zmiennych są czasami zapisywane do celów debugowania. Na przykład, jeśli używasz GCC, możesz przekazać opcję -g
, aby emitować "tabelę symboli", która zawiera takie nazwy zmiennych, jak debugowanie. Ale nie jest potrzebne po prostu do uruchomienia programu i nie jest objęty standardem językowym - jest to funkcja implementacji, która różni się w zależności od platformy.
Tablica symboli jest konstrukcją kompilacji, nie odzwierciedla właściwości środowiska wykonawczego. Pliki map i informacje o debugowaniu są źródłami dostępnymi, aby uzyskać wyobrażenie o nazwach symboli dla lokalizacji, ale nie miały one być używane z programu .. RTTI i inne formy introspekcji są, ale C nie ma żadnej formy tego –