C Konvertierungsspezifizierer und Makros...

Majek

Cadet 4th Year
Registriert
Feb. 2005
Beiträge
88
Es ist zwar im Grunde genommen nicht so wichtig, bin aber kurz vorm Verzweifeln. Ich verstehe einfach was hier nicht funktioniert. Wollte die Makros aus der inttypes.h testen/benutzen und dabei passiert folgendes:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>

int main() {
int_least8_t i8;
int_least32_t i32;

printf("Wert für int_least8_t eingeben:");
scanf("%" SCNdLEAST8, &i8 );

printf("Wert für int_least32_t eingeben:");
scanf("%" SCNdLEAST32, &i32);

printf("i8: " "%10" PRIdLEAST8 "\n", i8);
printf("i32: " "%10" PRIdLEAST32 "\n", i32);

return 0;
}

Also, in inntypes.h steht: #define SCNdLEAST8 "hhd"
Der Präprozessor sollte doch also nur "hhd" einsezten, richtig?
Es kommt aber immer folgender Fehler:
12|error: expected ')' before 'SCNdLEAST8'|
Was ich nicht verstehe, ist, wenn ich manuell den Markro ersetze also einfach "hhd" hinschreibe klappt alles wunderbar und SCNdLeast32 macht auch keine Probleme...
Ich werde wahnsinnig...:(
 
Wie wäre es, wenn du den Compiler nennen würdest?

Du versuchst außerdem mit %d einen signed Character einzulesen, Character müssen mit %c eingelesen werden.

Darüberhinaus verstehe ich nicht was diese Präprozessoranweisungen bringen sollen. Man sollte vorsichtig mit dem Präprozessor sein, weil der Compiler die Syntax so nicht auf Korrektheit prüfen kann.
 
Ja, so meinte ich das. In der inttypes.h wird die Version auch geprüft und daher wird das Makro nicht ersetzt.
Welchen Compiler sollte ich dann nehmen?
 
Schwierig zu sagen. Nicht viele Compiler unterstützen den C99 Standard vollständig.

Der obige Code kann von Microsoft Visual Studio 2010 kompiliert werden, allerdings fehlt dort die Header inttypes.h. Visual Studio 2010 enthält nur die Header stdint.h aus dem C99 Standard.

Das heißt du musst die Header inttypes.h manuell hinzufügen.

Dein Code stammt übrigens aus dem Buch C von A bis Z von Jürgen Wolf .

http://openbook.galileocomputing.de...en_007.htm#mjdc3fe710a0f3af27e81228931f8e6bcb

Versuche es einmal mit Pelles C . Der unterstützt C99 offenbar vollständig.

http://www.smorgasbordet.com/pellesc/
 
Zuletzt bearbeitet:
Zurück
Oben