Forum: PC-Programmierung Die Funktion printf


von C-Anfänger (Gast)


Lesenswert?

Hey,

ich habe in einem Programm(C) mit #define eine Konstante definiert, nun 
möchte ich diese mit printf("%?", konstante) aufrufen. Wie ist das 
möglich?

Mit freundlichen Grüßen,

C-Anfänger

von nocheinGast (Gast)


Lesenswert?

Wenn du die Möglichkeit hast, einen Typen für die Konstante anzugeben, 
würde ich immer "const x y = z;" bevorzugen, mit Präprozessormakros 
macht das einfach keinen Spaß.

von troll (Gast)


Lesenswert?

C-Anfänger schrieb:
> Wie ist das
> möglich?
Das hängt von der Konstante ab. %d, %f oder auch %s oder oder doer...

von C-Anfänger (Gast)


Lesenswert?

Die konstante ist ein Wort, z.b Haus

von Timmo H. (masterfx)


Lesenswert?

1
#define BLUBB "Haus"
2
3
#include <stdio.h>
4
5
int main(){
6
7
  printf("%s",BLUBB);
8
9
}

von C-Anfänger (Gast)


Lesenswert?

Timmo H. schrieb:
> #define BLUBB "Haus"
>
> #include <stdio.h>
>
> int main(){
>
>   printf("%s",BLUBB);
>
> }

Ahhh, vielen Dank!
Aber wieso genau steht haus in Anführungszeichen?

von Timmo H. (masterfx)


Lesenswert?

Weil es ein String/eine Zeichenkette ist.

Eine Zeichenkette wird in Anführungszeichen geschrieben und erhält damit 
automatisch die "\0" Terminierung. Diese wiederum ist notwendig, damit 
printf auch weiß wo der String aufhört.

Du solltest dir die C-Grundlagen mal zu Gemüte führen. "#define" ist 
praktisch nur eine Text-Ersetzung durch den Precompiler.
Am Ende steht dort genau das Gleiche wie
1
printf("%s","Haus");

von Rolf M. (rmagnus)


Lesenswert?

nocheinGast schrieb:
> Wenn du die Möglichkeit hast, einen Typen für die Konstante anzugeben,
> würde ich immer "const x y = z;" bevorzugen, mit Präprozessormakros
> macht das einfach keinen Spaß.

In c gibt es keine echten Konstanten, deshalb nimmt man da ja immer 
Makros dafür.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Oder vielleicht auch so:
1
#include <stdio.h>
2
3
#define STR2(x) #x
4
#define STR(x) STR2(x)
5
6
#define SYMBOL FOO
7
#define NUMBER 123
8
#define STRING "bar"
9
#define GRZKPF $%&@}!#
10
11
int main(void) {
12
  printf("%s\n", STR(SYMBOL));
13
  printf("%s\n", STR(NUMBER));
14
  printf("%s\n", STR(STRING));
15
  printf("%s\n", STR(GRZKPF));
16
17
  return 0;
18
}

Das STR-Makro macht aus seinem Argument einen String, der mit dem
%s-Format von printf ausgeben werden kann.

Ausgabe:
1
FOO
2
123
3
"bar"
4
$%&@}!#

von Mark B. (markbrandis)


Lesenswert?

Rolf Magnus schrieb:
> In c gibt es keine echten Konstanten

Bitte was? Es gibt ja auch noch enum.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.