2017-08-17 1 views
1

Ich begann, Programme auf Strukturen zu tun. Ich bin verwirrt über die Deklaration von Strukturen selbst, weil es mehrere Deklarationen derselben Variablen erlaubt, was in c nicht üblich ist.Warum kein Fehler bei mehreren Deklarationen der gleichen Strukturvariablen

uns den folgenden Code Lassen Sie betrachten:

#include<stdio.h> 

struct { 
     int x; 
     int y; 
}u, v; 

int main() 
{ 
     struct {int x; int y;} u = {3, 4}, v = {5, 6}; 
/*  struct {int x; int y;} u, v*/ 
     printf("%d\n", u.x); 
     printf("%d\n", v.y); 

     return 0; 
} 

Im Allgemeinen C mehrere Erklärung derselben Variablen nicht zulässt, auch hier ist es, wenn ich die zweite Aussage in Haupt nicht auf Kommentar. Aber mein Zweifel ist der, warum es die mehrfache Deklaration derselben Variablen vernachlässigt, wenn man innerhalb von main und nicht anders ist?

+1

Das innere "u" unterscheidet sich vom äußeren "u". Allen gemeinsam ist der Name, wobei das innere "u" das äußere "u" beschattet (versteckt). Gleiches für "v". – alk

+0

'Zeichen x; void foo (int x) {{float x; {double x;}}} ist gültig. :-) – alk

Antwort

3

Variablen in einem Bereich dürfen shadow Variablen in einem umschließenden Bereich. So existieren beide Variablen, aber wenn Sie u innerhalb main schreiben, bezieht sich das auf den in main deklarierten.

Schreiben Sie nicht solchen Code, es ist verwirrend, obwohl legal.

+0

Also, sind u und v außerhalb von Main geschrieben globale Variablen? – hanugm

+1

Der korrekte Ausdruck in C wäre * file-scoped * Variablen. Das ist wahrscheinlich, was du mit * global * meinst. –

2

C ermöglicht die Mehrfachdeklaration derselben Variablen, wenn sie in einem anderen Bereich deklariert sind. u in main deklariert, mit Block-Bereich, wird die Deklaration von u weltweit deklariert verbergen.

§6.2.1 (p4):

[...] Innerhalb des inneren Umfangs, die Kennung bezeichnet die Entität in dem inneren Umfang erklärt; Die im äußeren Bereich deklarierte Entität ist innerhalb des inneren Bereichs verborgen (und nicht sichtbar).

Verwandte Themen