Dlaczego kompilator nie wywala redeklaracji
Ostatnio zmodyfikowano 2012-09-01 22:09
McAffey Temat założony przez niniejszego użytkownika |
Dlaczego kompilator nie wywala redeklaracji » 2012-09-01 21:58:51 Witam. Ostatnio mnie zaintrygowała jedna rzecz. Może zamiast tłumaczyć od razu pokażę na przykładzie (używam kompilatora GNU GCC, na żadnym innym nie próbowałem). Dlaczego w kodzie : int zmienna_globalna;
void funkcja( int zmienna_globalna ) { return; }
int main() { funkcja( zmienna_globalna ); return 0; } kompilator nie wywala redeklaracji zmiennej zmienna_globalna ? Wydawało mi się, że tak się będzie działo, ponieważ ta zmienna globalna jest dostępna wewnątrz funkcji, a tutaj się kompiluje nawet bez ostrzeżeń. Ktoś z was się kiedyś nad tym zastanawiał ? Może to po prostu niedociągnięcie ze strony twórców kompilatora albo kwestia ustawień kompilacji. To w sumie nieistotna błahostka, ale że mnie intryguje to stwierdziłem że tu napiszę :) |
|
jankowalski25 |
» 2012-09-01 22:05:49 Chodzi o to, że gdy w funkcji na liście argumentów użyjesz nazwy zmiennej globalnej, to ją "zasłaniasz" i kompilator przyjmuje najbliższą nazwę (czyli jako argument funkcji). Przykład: #include <iostream>
int zmienna_globalna;
void funkcja( int zmienna_globalna ) { zmienna_globalna = 1; zmienna_globalna =::zmienna_globalna; std::cout << zmienna_globalna << "\n"; return; }
int main() { funkcja( zmienna_globalna ); std::cout << zmienna_globalna << "\n"; return 0; }
|
|
McAffey Temat założony przez niniejszego użytkownika |
» 2012-09-01 22:09:20 Dzięki wielkie za wyjaśnienie, na takie właśnie liczyłem :) |
|
« 1 » |