"Comportamento non definito" indica il C resp. Gli standard C++ non definiscono il comportamento del tuo programma. Se il tuo programma contiene assembly inline, dovrebbe essere abbastanza chiaro che il suo comportamento non sarà normalmente descritto dallo standard C o C++. Alcuni altri standard potrebbero anche definire il comportamento, ma ciò non significa ancora "comportamento definito" nel contesto dello standard C o C++.
Detto questo, lo standard C richiede documentazione delle estensioni supportate. Se il comportamento del programma si può dedurre dalla documentazione del implementazione e l'implementazione rende il vostro programma di comportarsi in modo diverso, che è un fallimento della vostra implementazione di conformarsi allo standard:
4. Conformità
8 Un'implementazione deve essere accompagnata da un documento che definisca tutte le caratteristiche definite dall'implementazione e specifiche della locale e tutte le estensioni.
Per C++, questo requisito è stato attenuato: conformità
1,4 Attuazione [intro.compliance]
9 Ciascuno di esecuzione comprende documentazione che identifica tutti i costrutti condizionalmente supportati che non supporta e definisce tutte le caratteristiche specifiche della locale.
e
1,9 L'esecuzione del programma [intro.execution]
2 Certi aspetti e le operazioni della macchina astratta sono descritti nella presente norma internazionale come definito dall'implementazione [... ] Ogni implementazione deve includere una documentazione che descriva le sue caratteristiche e il suo comportamento in questi aspetti. [...]
Non riesco a trovare un requisito per le estensioni da documentare e, se documentato, per essere documentato correttamente. Ciò suggerirebbe che in C++, anche se la tua implementazione definisce il comportamento del tuo programma come un'estensione, se risulta che la documentazione è sbagliata, è semplicemente un peccato.
Per la dichiarazione semi-standard C++ asm
(come menzionato nei commenti, "La dichiarazione asm
è supportata in modo condizionale, il suo significato è definito dall'implementazione."), Se l'implementazione lo supporta è necessario che sia documentato, ma naturalmente è prassi comune che le implementazioni supportino l'assemblaggio in linea in modo diverso da quanto suggerito dallo standard C++, quindi questo non ti dà molto di più.
Questa è una domanda molto interessante. Voglio sapere anche io. – callyalater
Inline asm anche standard C o C++ in primo luogo? Onestamente non lo so. In caso contrario, l'intera domanda si trova su un terreno instabile che sento. –
Bene c'è [dcl.asm]: * La dichiarazione 'asm' è supportata in modo condizionale; il suo significato è definito dall'implementazione. * – NathanOliver