2015-11-05 13 views
62

Ho la seguente fonte:Che cosa significa il suffisso J intere?

int main() { 000J; } 

con GCC 4.8.4 compila senza errori. So che ci sono suffissi come L o U, ma non ho trovato nulla su J.

Quindi cosa fa?

+7

Assicurati di compilarlo con '-std = C++ 11 -pedantic' per evitare le estensioni del compilatore. Di default userà '-std = gnu ++ 11' (penso) che abiliti estensioni non standard. – Simple

+0

Hai ragione. Con la bandiera '-pedantic' ho lo stesso avvertimento di zenith che punta alla risposta. – happyMOOyear

+5

Il tag C++ è collocato qui TBH. C++ ha solo [suffisso 'i'] (http://en.cppreference.com/w/cpp/numeric/complex/operator%22%22i) non' J'. È un altro tipo, 'std :: complex ' invece di '_Complex'. Ed è standard C++, non un'estensione. – MSalters

risposta

71

ottengo un avvertimento:

costanti immaginari sono un'estensione GNU

Il suffisso J è un'estensione GNU, che fa sì che il letterale essere di tipo _Complex.

Maggiori informazioni qui: https://gcc.gnu.org/onlinedocs/gcc/Complex.html

+0

Hm, non ho ricevuto questo avviso. Quale versione di gcc stai usando e hai usato qualche flag di compilazione? – happyMOOyear

+1

@happyMOOyear Prova '-pedantic'. –

+2

Sto usando Apple LLVM 7.0 con '-pedantic'. – emlai

13

Come zenith accennato, si tratta di un'estensione GNU per la scrittura letterali immaginari. Voglio davvero commentare la logica dell'utilizzo di j per questo scopo, come si chiede imallett, ma non ho abbastanza reputazione per commentare la risposta di zenith. Lascerò comunque questa risposta in quanto potrebbe essere utile per gli altri.

Come spiega this link, sia i sia j possono essere utilizzati per scrivere letterali immaginari usando questa estensione GNU. Il motivo per cui è usato i è ovvio, ma il motivo per cui viene utilizzato j è che j è comunemente usato per indicare l'unità immaginaria in ingegneria elettrica e ingegneria dei sistemi di controllo per evitare confusione poiché i è già utilizzato per indicare la corrente elettrica in quei contesti.

+2

@EdHeal La sintassi corretta è "I am confused" :) – Barmar

+1

Questa risposta è ancora migliore, perché il numero diventa immaginario, non complesso, il primo è un sottoinsieme di quest'ultimo. – Dirk

+0

'i' e' j' sono anche per convenzione spesso definiti in modo leggermente diverso tale che 'exp (-ix) = exp (jx)'. – Forss