2015-11-05 10 views
62

Ich habe die folgende Quelle:Was bedeutet das ganzzahlige Suffix J?

int main() { 000J; } 

mit gcc 4.8.4 es ohne Fehler kompiliert wird. Ich weiß, dass es Suffixe wie L oder U gibt, aber ich habe nichts über J gefunden.

Also was macht es?

+7

Stellen Sie sicher, dass Sie mit '-std = C++ 11 -pedantic 'kompilieren, um Compiler-Erweiterungen zu vermeiden. Standardmäßig wird '-std = gnu ++ 11' verwendet (denke ich), die nicht standardmäßige Erweiterungen aktiviert. – Simple

+0

Sie haben Recht. Mit der '-pedantic'-Flagge bekomme ich die gleiche Warnung wie Zenit, die auf die Antwort zeigt. – happyMOOyear

+5

Das C++ - Tag ist hier TBH verlegt. C++ hat nur [Suffix 'i'] (http://en.cppreference.com/w/cpp/numeric/complex/operator%22%22i) nicht' J'. Es ist ein anderer Typ, 'std :: complex ' anstelle von '_Complex'. Und es ist Standard C++, keine Erweiterung. – MSalters

Antwort

71

erhalte ich eine Warnung:

Imaginary Konstanten ist eine GNU-Erweiterung

Das J Suffix ist eine GNU-Erweiterung, die die wörtliche verursacht einen _Complex Typen sein.

Mehr Infos hier: https://gcc.gnu.org/onlinedocs/gcc/Complex.html

+0

Hm, ich habe diese Warnung nicht bekommen. Welche Version von gcc benutzt du und hast du irgendwelche Kompilierflags benutzt? – happyMOOyear

+1

@happyMOOyear Probieren Sie "-pedantic" aus. –

+2

Ich benutze Apple LLVM 7.0 mit '-pedantic'. – emlai

13

Als Zenit erwähnt, ist dies eine GNU-Erweiterung für imaginäre Literale zu schreiben. Ich möchte wirklich die Gründe für die Verwendung von j zu diesem Zweck kommentieren, da sich Imallett fragt, aber ich habe nicht genug Reputation, um Zeniths Antwort zu kommentieren. Ich werde das als eine Antwort trotzdem verlassen, wie es für andere hilfreich sein könnte.

Wie this link erklärt, können beide i und j verwendet werden, um imaginäre Literale mit dieser GNU-Erweiterung zu schreiben. Der Grund, warum i dafür verwendet wird, ist offensichtlich, aber der Grund, warum j auch verwendet wird, ist, dass j allgemein verwendet wird, um die imaginäre Einheit in der Elektrotechnik und Steuerungstechnik zu bezeichnen, um Verwirrung zu vermeiden, da i bereits verwendet wird, um elektrischen Strom zu bezeichnen in diesen Kontexten.

+2

@EdHeal Die korrekte Syntax ist "Ich werde verwirrt" :) – Barmar

+1

Diese Antwort ist noch besser, weil die Zahl wird imaginär, nicht komplex, der erste ist eine Teilmenge der letzteren. – Dirk

+0

'i' und' j' werden auch per Konvention oft leicht anders definiert, so dass 'exp (-ix) = exp (jx)'. – Forss