(gelöst) [C++]const eines Parameters für Linker relevant?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

(gelöst) [C++]const eines Parameters für Linker relevant?

Beitrag von Krishty »

Sagen wir, ich habe zwei .cpp-Dateien.

Die eine definiert eine Funktion

  void foo(int * const x) {
    // tut nix weil Beispiel
  }


In der anderen .cpp wird diese Funktion deklariert:

  void foo(int *); // KEIN CONST!

Visual C++ kann dann nicht mehr kompilieren (Linkerfehler, Funktion nicht gefunden).

Ich bin mir recht sicher, dass das ein Linker-Bug ist:
  • Ich glaube, der C++-Standard schreibt vor, dass const an by-value-Parametern keine Auswirkungen auf die Signatur hat. (Weil es ein Detail der Implementierung ist und in der Deklaration nichts verloren hat.)
  • Wenn man die Deklaration vor die Definition kopiert, kompiliert es plötzlich. (Das entspricht etwa dem #include eines Headers.)
  • Wenn man die Funktion von int *-Parameter zu int-Parameter ändert, kompiliert alles. Das passiert irgendwie nur mit Zeigern. (Ich hatte vor fünf Jahren ein Ticket eröffnet mit int als Beispiel. Mich beschleicht das Gefühl, dass sie nur den Fall gefixt und Zeiger vergessen haben.)
Liege ich damit richtig? Hat zufällig jemand die richtigen Paragraphen zur Hand? Dann kann ich nämlich direkt einen Bug Report anlegen.
Zuletzt geändert von Krishty am 31.03.2018, 13:53, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [C++] const-ness eines Parameters für Linker relevant?

Beitrag von dot »

Da geht wohl beim Name-Mangling was in die Hose...

Du suchst vermutlich das hier: http://eel.is/c++draft/dcl.fct#5

Demo dass du vermutlich richtig liegst: https://godbolt.org/g/idkLCh

Edit 2: LOL! Auch MSVC beschwert sich bei obigem Code dass die Funktion bereits definiert wurde. Sobald die Implementierung aber in einem anderen File liegt, ist es auf einmal nicht mehr das selbe...


Edit: Du bist wohl nicht der Erste dem das auffällt: https://stackoverflow.com/questions/324 ... r/32448512...

Wenn du reportest, bitte verlink den Report hier, dann kann ich gleich upvoten ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [C++] const-ness eines Parameters für Linker relevant?

Beitrag von Krishty »

Danke dafür, das ist echt aussagekräftig.

Bin übrigens gerade zufällig auf das erste Mal gestoßen, als ich es hier erwähnt habe: https://zfx.info/viewtopic.php?f=9&t=30 ... 060#p36226

Die Bug Reports sind mittlerweile gelöscht: https://zfx.info/viewtopic.php?f=9&t=30 ... 060#p36232 … aber wenn ich mich recht erinnere, war es sowas wie „fixen wir irgendwann später mal“. (Den template-Bug haben sie aber mittlerweile behoben.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [C++] const-ness eines Parameters für Linker relevant?

Beitrag von Krishty »

Bittesehr: https://developercommunity.visualstudio ... fiers.html
(Ich sehe ja, wie fleißig du immer upvotest; danke dafür!)

Hat mich bloß eine Stunde gekostet, weil beim Absenden „Access Denied“ angezeigt wurde, der Draft nicht wiederhergestellt werden konnte, und ich dann über die Visual Studio-Feedback-Option melden musste, und das dann meine Formatierung und den Anhang zerstört hat ¯\_(ツ)_/¯

P.S.: Alle Bugs sind hier gelistet: http://krishty.com/bugs.html
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten