2017-09-09 6 views
-3

Ich habe kürzlich nach einer neuen IDE für C++ gesucht. Früher habe ich Dev C++ benutzt, aber es sind ein paar Barebones im Vergleich zu anderen IDEs.Warum funktioniert printf in Dev C++, aber nicht in CLion?

Ich bin auf ein Problem gestoßen, mit dem ich versucht habe, mit meinem Professor zu sprechen, und er sagte, dass es wahrscheinlich auf die Standard-Bibliothek Implementierung und nicht die IDE selbst zurückzuführen ist - was mich denken lässt, dass ich beheben kann es? Ich komme zum Punkt:

In Dev C++, wenn ich printf ("% '14 .2f", Variable) sage, druckt es wie ich es erwarte. Aber in CLion markiert es das Symbol% ​​und sagt "Unbekannter, unvollständiger oder optionaler Formatbezeichner" und druckt '14 .2f statt meiner Variablen. Ich weiß, dass dies wegen des Apostrophs ist, aber ich weiß nicht, wie ich es beheben soll.

Hat jemand irgendwelche Ideen? Mein Professor sagte GCC's libstd ++ sollte gut funktionieren, aber ich weiß nicht, was ich mit dieser Information machen soll ...

Danke!

Edit: Ich bin übrigens auf Windows.

+0

Was bedeutet 'in der Formatzeichenfolge? Es ist C++, benutze std :: cout! –

+0

Wie in der [Dokumentation] (http://en.cppreference.com/w/cpp/io/c/fprintf) erklärt: _Wenn eine Konvertierungsspezifikation ungültig ist, ist das Verhalten undefined_. Daher ist jede Ausgabe, die durch eine solche 'printf'-Anweisung erzeugt wird," korrekt "- unabhängig von Ihren Erwartungen. –

+2

Um ... Entfernen Sie das Apostroph? Es ist in Druckformatbezeichnern ungültig. Warum ist es überhaupt dort? –

Antwort

1

Die Verwendung des Apostroph als Kennzeichen Zeichen in einer printf Format-Zeichenkette ist eine Erweiterung von POSIX definiert:

Der ganzzahlige Teil des Ergebnisses einer Dezimal-Umwandlung (%i, %d, %u, %f , %F, %g oder %G) müssen mit Tausendergruppierung Zeichen formatiert sein. Bei anderen Konvertierungen ist das Verhalten nicht definiert. Das nicht monetäre Gruppierungszeichen wird verwendet.

Ihr Professor ist richtig: Unterstützung für diese Erweiterung durch die Standard-Bibliothek Implementierung bestimmt wird, nicht von der IDE oder durch den Compiler.

Aber:

Mein Professor sagte GCC libstd ++ sollte gut funktionieren, aber ich weiß nicht, was mit dieser Information zu tun.

libstdC++ ist eine C++ - Bibliothek. Es bietet nicht die Implementierung der printf Funktion; das ist Teil der C-Bibliothek. (Die C++ - Bibliothek enthält den größten Teil der C-Bibliothek.)

Sie sollten untersuchen, welche C++ - Implementierung (Compiler und Bibliothek) Ihre IDEs verwenden. Sie können CLion möglicherweise dazu bringen, dieselbe C++ - Implementierung zu verwenden, die von Dev C++ verwendet wird.

+0

"Die Unterstützung für diese Erweiterung wird von der Standardbibliotheksimplementierung bestimmt, nicht von der IDE oder vom Compiler." - sag was? Die Unterstützung für dieses Feature kann vom Compiler bestimmt werden - der GCC-Compiler beispielsweise betrachtet Formatzeichenfolgen, und weder ein Standard C- noch C++ - Compiler muss diese Funktion unterstützen. –

+0

@NeilButterworth: Der gcc-Compiler betrachtet Formatzeichenfolgen, aber nur so, dass es Warnungen ausgeben kann. Nachdem eine Warnung ausgegeben oder nicht ausgegeben wurde, wird nur ein Aufruf der Funktion 'printf' mit den Argumenten erzeugt, die Sie übergeben haben. Weder gcc noch clang bietet eine Implementierung von 'printf'. Zum Beispiel wird auf meinem System die printf-Implementierung von glibc bereitgestellt, einem separaten Projekt von gcc. –

+0

@KeithThompson Hast du eine Idee, wo ich anfangen sollte, um so etwas zu tun? Ich habe nicht viel Erfahrung mit dem Ändern von IDEs wie diesem. – Andersma

Verwandte Themen