Thread XS und C++ Code (8 answers)
Opened by reinhardp at 2018-11-06 13:50

Raubtier
 2018-11-06 22:32
#189124 #189124
User since
2012-05-04
1075 articles
BenutzerIn
[default_avatar]
2018-11-06T13:04:58 GwenDragon
Dein Code des Makefile.PL für den Compiler ist doch:
Quote
Code: (dl )
    'CC'        => 'cl -TP -EHsc -GA3s -W3',

https://metacpan.org/source/RPAGITSCH/Win32-File-S...

Ungetestet: c++ statt cl nehmen. bei den Schaltern weiß ich jetzt nicht.

Der MSVC-Compiler heißt aber cl.exe. Nur sind die Schalter eigentlich alle mit / statt -. Und /TP heißt, dass eine C++-Datei erwartet wird. Siehe https://msdn.microsoft.com/de-de/library/fwkeyyhe....

Wie lautet denn die Fehlermeldung? MSVC war früher recht, ähm, flexibel, was die Interpretation des C++-Standards angeht, ist inzwischen aber da sehr streng.

Edit: ah, du willst mingw nehmen. Normalerweise erkennen die Compiler ja an der Dateiendung, welche Sprache es ist. Ich sehe aber kein cpp/cxx/cc bei dir. Versuch mal, dem Compiler -std=c++14 (eine Zahl aus 98, 03, 11, 14, 17 (oder 0x für 11, 1y für 14, 1z für 17 (für die Betas) bzw 2a für die Zukunft)) anzugeben; Warnungen sollten mit -Wall -Wextra -Wpedantic gehen (bei älteren Compilern -pedantic statt -Wpedantic). Und sollte das aber nicht CXX statt CC sein? So kenne ich das zumindest von Makefiles. (Bin aber mit Perl/Windows und XS sehr unerfahren)

Edit2: Ein paar Anmerkungen zu deinem Summary.h / Summary.xs:

  • In C++ braucht man kein void zu schreiben für 0-argumentige Funktionen
  • Vermeide new&delete, insbesondere hast du ein Speicherleck in Zeile 66/67 in Summary::Summary (new, dann Aufruf von substring). Die substring-Funktion selbst ist auch mehr als fragwürdig - du musst das Ergebnis sofort wegkopieren, sonst kannst du sie nur 1x verwenden oder änderst jedes Mal das Ergebnis; static storage duration ist nicht einmal thread safe. Viel schlimmmer noch: du deletest ggf. den falschen Speicher (den statischen von substring statt den dynamischen)!
  • NULL heißt in C++ nullptr
  • Du solltest Dinge mit "const" markieren, die const sind, also insbesondere die char*-Parameter.
  • Bestimmt noch viel mehr... :-(

Last edited: 2018-11-06 23:02:30 +0100 (CET)

View full thread XS und C++ Code