2015-10-26 16 views
6

Perché un errore di chiusura #region causa un errore del compilatore? Dopo tutto, la regione stessa non ha assolutamente alcun impatto sul codice compilato, giusto?Perché #region genera errori di compilazione?

Credo sia perché è una direttiva preprocessore, ma perché? Dopotutto non viene usato come le altre direttive.

class Application 
{ 
    #region Whatever <- Causes an error. 
    static void Main(string[] c) 
    { 

    } 

} 

Perché non può essere semplicemente ignorato? O c'è una caratteristica che non conosco su #region che spiega perché è stata compilata?

Modifica: ho capito che questo esempio non si compila perché non c'è il corrispondente #endregion. Ma non dovrebbe essere trattato come un tag di chiusura mancante in un commento xml? Voglio dire, ha la stessa importanza, vero?

Secondo Edit: Sto cercando di capire la decisione di progettazione dietro facendo #region una direttiva del preprocessore. Perché non solo una sorta di commento che l'IDE riconoscerebbe come una regione di codice che può essere compresso?

+3

Non viene compilato perché il preprocessore si aspetta che ci sia qualcosa e non riesce a trovarlo, quindi si verifica un errore. Hai ragione che non modifica il codice, tuttavia il preprocessore deve vedere il tag finale corrispondente. –

+0

No, l'importanza di una direttiva per il preprocessore è molto diversa da un tag di commento xml non corrispondente. – jrummell

+0

@jrummell in realtà, a mio parere, è viceversa. – AgentFire

risposta

14

Perché una #regione non di chiusura causa un errore del compilatore?

Perché il specs dice così.

Un blocco #regione deve essere terminato con una direttiva #endregion.

Sì, non sarà parte del programma compilato, ma le direttive altri pre-processore può definire, ciò che deve essere parte del programma, per esempio #if DEBUG(includere qualcosa).

2.5 Pre-processing directives

direttive di pre-elaborazione non sono gettoni e non fanno parte del grammatica sintattica di C#. Tuttavia, le direttive di pre-elaborazione possono essere utilizzate per includere o escludere sequenze di token e in tal modo influenzare il significato di un programma C#.

Per la vostra domanda:

Ma perché è il preprocessore anche considerando il tag #region, perché è stato ha creato come una direttiva del preprocessore e non solo un altro tipo di commento?

regioni sono utili per IDE (Visual Studio) scopo, sarebbe molto difficile (se non impossibile) per ottenere lo stesso caratteristica di collasso/espandere codice senza regioni.(questo è la mia ipotesi, solo un membro del Dev team di Microsoft potrebbe rispondere a questa)

Region directive:

Nessun significato semantico è attaccato ad una regione; Le aree sono destinate a per l'utilizzo da parte del programmatore o da strumenti automatici per contrassegnare una sezione del codice sorgente . Anche il messaggio specificato in una direttiva #region o #endregion non ha alcun significato semantico; serve solo a identificare la regione. Le direttive #region e #endregion corrispondenti possono avere diversi messaggi in pp.

Problemi correlati