Question 11.33

La gente sembra distinguere con cura tra definito dall'implementazione, non specificato, e comportamento indefinito. Quale e` la differenza?


Brevemente: Definito dall'implementazione significa che una implementazione deve scegliere qualche comportamento e documentarlo. Non specificato significa che una implementazione dovrebbe scegliere qualche comportamento, ma non e` necessario che lo documenti. Indefinito significa che potrebbe non succedere niente. In nessun caso lo Standard impone richieste; nei primi due casi occasionalmente suggerisce (e puo` richiedere una scelta tra) un piccolo insieme di probabili comportamenti.

Notare che dal momento che lo Standard non impone richieste sul comportamento del compilatore di fronte a un caso di comportamento indefinito, il compilatore puo` non fare assolutamente nulla. In particolare, non c'e` alcuna garanzia che il resto del programma funzionera` normalmente. E` potenzialmente pericoloso pensare che si possa tollerare un comportamento indefinito in un programma; vedere domanda 3.2 per un esempio relativamente semplice.

Se si e` interessati a scrivere del codice portabile, si possono ignorare le distinzioni, poiche` bisogna evitare del codice che dipenda da uno qualsiasi di questi tre comportamenti.

Vedere anche domande 3.9, and 11.34.

Riferimenti: ANSI Sez. 1.6
ISO Sez. 3.10, Sez. 3.16, Sez. 3.17
Rationale Sez. 1.6


Leggere di seguito: prev prossima su cima


Questa pagina e` di Steve Summit // Copyright 1995 // mail feedback