Seite 1 von 1

Compiler klemmt nach der Deklaration einer Konstanten

Verfasst: 08.05.2009 11:54
von heiße Luft
Hallo Leute,

nach der Konvertierung einer C lib "PviCom.h" mit dem "Header Converter" aus der Libaray SDK habe ich ein Problem bei der Deklaration einer Konstanten.
Original C lib

Code: Alles auswählen

#define PVICHR_PARAM '"'
Original Entsprechung aus einer include für MS-VB

Code: Alles auswählen

Public Const PVICHR_PARAM = """"
Nach Konvertierung durch den Header Converter für PB:

Code: Alles auswählen

#PVICHR_PARAM = """"
Der Compiler gibt mir hier die Meldung aus:

Code: Alles auswählen

Garbage to the end of line
Wenn ich die inneren Anführungszeichen weglasse läuft der Compiler durch.
Woran kann es liegen?
bzw: Wie bekomme ich zwei Anfürungszeichen als String?

Gibt es irgendwo einen Text der mir die Fehlermeldungen des Compilers ein wenig erläutert?

viele Grüße hL
(ich weiß Newbies können nervig sein. Deshalb seid bedankt für eure Geduld, auch wenn man mal etwas nicht gleich beim ersten Mal kapiert)

Verfasst: 08.05.2009 12:24
von D@nte
Bei der Meldung gibt's eigtl nix zu erläutern, da steht schon genau was das Problem is "Müll am Ende der Zeile"
Ein String geht IMMER von " bis " sprich nur #Konstante = "" ist eine zulässig zuweisung alles was danach kommt ist 'Müll'.

Wenn ich dein Vorhaben richtig verstanden habe gibt's jetzt min 3 Möglichkeiten das zu lösen:

1.)

Code: Alles auswählen

#PVICHR_PARAM = Chr(34) + Chr(34)
2.)

Code: Alles auswählen

#PVICHR_PARAM = #DQOUTE$ + #DQOUTE$
3.)
überall wo #PVICHR_PARAM auftaucht durch #DQOUTE$ + #DQOUTE$ ersetzen

Aber mal so am Rande bist du dir sicher das #PVICHR_PARAM äquivalent zu "" sein soll und nicht eher äquivalent zu " ?!
Sollte #PVICHR_PARAM nämlich nur " darstellen einfach

Code: Alles auswählen

#PVICHR_PARAM = Chr(34)
oder

Code: Alles auswählen

#PVICHR_PARAM = #DQOUTE$
verwenden

Re: Compiler klemmt nach der Deklaration einer Konstanten

Verfasst: 08.05.2009 12:30
von Little John
heiße Luft hat geschrieben:Wie bekomme ich zwei Anfürungszeichen als String?

Code: Alles auswählen

#PVICHR_PARAM = #DQUOTE$ + #DQUOTE$
heiße Luft hat geschrieben:(ich weiß Newbies können nervig sein. Deshalb seid bedankt für eure Geduld, auch wenn man mal etwas nicht gleich beim ersten Mal kapiert)
"Nervig" möchte ich von meiner Seite nicht sagen. Allerdings wäre es manchmal schon schön, wenn Fragen mehr "auf ihren Kern konzentriert" wären. :-)
Und auch aussagekräftige Threadtitel sind wünschenswert. "Compiler klemmt" hört sich für mich so an, als wenn er sich aufgehängt hat.

//edit: D@nte war schneller ...

Gruß, Little John

Verfasst: 08.05.2009 15:11
von heiße Luft
D@nte hat geschrieben: Aber mal so am Rande bist du dir sicher das #PVICHR_PARAM äquivalent zu "" sein soll und nicht eher äquivalent zu " ?!
Nein, sicher bin ich mir über überhaupt nichts. Tatsache ist das ich zwei Dateien geliefert bekommen habe. Eine für MS-VB und eine lib für MS-VC. Die Konstanten sind in den Dateien wie oben gezeigt deklariert.
Also für VC nur “
für VB ““
und der Header Converter macht aus ´ “` ja auch ““““ wie in der VB Version.
Ich lasse die Konstante erst mal ausgeklammert. Ob ich sie überhaupt brauche weiß ich eh noch nicht. Wenn ich sie brauche muß ich wohl ausprobieren ob #DQOUTE$ + #DQOUTE$ oder nur #DQOUTE$

Danke für die Antwort
hL

Verfasst: 08.05.2009 15:21
von Kaeru Gaman
> und der Header Converter macht aus ´ “` ja auch ““““ wie in der VB Version.

das ist ebenso merkwürdig wie falsch.

Code: Alles auswählen

#define PVICHR_PARAM '"'
im c-source ist ganz eindeutig

Code: Alles auswählen

#PVICHR_PARAM = Chr(34)
eventuell macht er für VB ein """" daraus, weil man zum escapen eines quote ein zweifaches quote schreiben muss.

in PB ist das nicht möglich, da werden keine escapes unterstützt.

also mittels der Chr() funktion den ASCII code übergeben.

Verfasst: 08.05.2009 16:14
von edel
Den C Code kann man doch ganz leicht uebersetzen, oder hab ich was falsch verstanden? Ist aber ein Char und kein String.

Code: Alles auswählen

#PVICHR_PARAM = '"'

Verfasst: 08.05.2009 16:32
von Kaeru Gaman
> Ist aber ein Char und kein String.
sicher?
bzw... wo ist der Unterschied?

echte strings gibts in C sowieso nicht, das sind immer CharArrays, noch nicht mal immer nullterminiert...

die Frage wäre also, wie wird die Konstante im weiteren Code verwendet.

wenn sie als numerische CHAR verwendet wird, hast du natürlich recht, dann kann man es einfach als

Code: Alles auswählen

#PVICHR_PARAM = '"' 
oder auch als

Code: Alles auswählen

#PVICHR_PARAM = 34 
definieren.