Ungültiges Suffix "-252" für Integer-Konstante

8

Ich habe versucht, eine C-Datei von Ссылка zu starten, aber ich Erhalten Sie Invalid suffix "-252" on integer constant in diesem Teil des Codes:

%Vor%

Ich bin mir ziemlich sicher, dass es syntaxbezogen ist. Aber ich verstehe Code nicht wirklich (ich versuche es, aber ich stecke ziemlich fest). Kann mir jemand helfen?

    
amree 15.08.2012, 21:57
quelle

2 Antworten

5
%Vor%

ist eine hexadezimale Gleitkommakonstante in C und -252 ist der Exponententeil. Sie erhalten die Warnung, weil Sie ein Integer-Objekt mit einer Float-Konstante initialisieren.

%Vor%

ist ein ganzzahliger Ausdruck.

Verwenden Sie Letzteres, um das gewünschte Verhalten zu haben.

BEARBEITEN :

meine Antwort ist eigentlich nicht wahr. Während das Update in Ordnung ist, finden Sie in der Antwort von @MichaelBurr für die echte Erklärung dessen, was vor sich geht. 0x11E-252 wird als einzelnes Token unter C-Regeln gelesen und ist keine gültige Gleitkommazahl (oder Ganzzahl).

    
ouah 15.08.2012, 22:02
quelle
11

Dieses Problem hängt zwar mit hexadezimalen Gleitkommakonstanten zusammen, aber die Ursache des Problems liegt nicht darin, dass 0x11E der Anfang einer hexadezimalen Gleitkommakonstante ist (weil es nicht der Anfang einer hexadezimalen Gleitkommakonstante ist). .

Das Problem ist, dass 0x11E-252 ein einzelnes Token anstelle von drei Token wie 0x11F-252 ist. Wenn Sie C99 6.4.8 "Preprocessing Numbers" betrachten, sehen Sie, dass ein pp-number Token ist:

  

Eine Vorverarbeitungsnummer beginnt mit einer Ziffer, der optional ein Punkt (.) vorangestellt ist, gefolgt von gültigen Identifizierungszeichen und den Zeichenfolgen e +, e-, E +, E-, p +, p-, P + oder P-.

Also ist 0x11E-252 ein einzelnes Token und Tokenisierung tritt in Übersetzungsphase 3 auf, aber wenn es Zeit ist, das Token syntaktisch und semantisch zu interpretieren (was in Übersetzungsphase 7 passiert), ist es nicht syntaktisch gültig, so dass Sie einen Compiler bekommen Fehler.

Andererseits sind 0x11F-252 drei Tokens, weil - nicht Teil eines Tokens für die Anzahl der Vorläufe ist, es sei denn, es folgt unmittelbar ein P oder E (Groß- oder Kleinschreibung).

Natürlich hängt dies mit Gleitkomma-Konstanten zusammen (hexadezimal oder nicht), weil das - -Zeichen in der Mitte eines Vorverarbeitungs-Nummern-Tokens liegen kann. Beachten Sie jedoch, dass Sie ähnliche Fehlermeldungen für Token wie 0xx11F oder 22bad_token erhalten, die keine Ähnlichkeit mit einer hexadezimalen Gleitkommakonstante haben.

Das Update ist wie ouah notiert , fügen Sie Whitespace vor dem - ein, um den Compiler zu zwingen, die Sequenz als zu behandeln mehr als ein Token Wenn dies Ihr Code wäre, könnte eine noch bessere Lösung darin bestehen, all diesen magischen Zahlen (Enums oder Makros) Namen zu geben. Ein Bezeichner gefolgt von - wird nicht als einzelnes Token betrachtet. Außerdem hätten Sie hoffentlich den Vorteil, dass der Code ein wenig selbstdokumentierter wird.

    
Michael Burr 16.08.2012 00:06
quelle

Tags und Links