Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Informatik in der Schule (http://www.informatikerboard.de/board/board.php?boardid=21)
--- #define & integer (http://www.informatikerboard.de/board/thread.php?threadid=3225)


Geschrieben von Robert93 am 07.10.2016 um 16:14:

  #define & integer

Meine Frage:

Hallo Leute,

ich bin ein totaler Frischling in Sachen programmierung und habe das Buch "C als erste Programmiersprache" angefangen zu bearbeiten.
Zu Beginn habe ich die Datentypen Int, float etc kennengelernt.
Jetzt wurde in dem Buch die Konstante #define vorgestellt.
Nur den Sinn verstehe ich dabei nicht wirklich.
Es war ein Beispielcode dabei:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
/* Datei: zins.c */
#include <stdio.h>

//#define LAUFZEIT     10
//#define GRUNDKAPITAL 1000.00
//#define ZINS         5.0

int LAUFZEIT = 10;
float GRUNDKAPITAL = 1000.00;
float ZINS = 5.0;

int main (void)
{
   int jahr;            /* Vereinbarung von jahr als int-Variable */
   double kapital = GRUNDKAPITAL;
   
   printf ("Zinstabelle fuer Grundkapital %7.2f EUR\n",                     
            GRUNDKAPITAL);
   printf ("Kapitalstand zum Jahresende:\n");
   for (jahr = 1; jahr <= LAUFZEIT; jahr = jahr + 1) 
   {
      printf ("\nJahr: -\t", jahr);
      kapital = kapital * (1 + ZINS/100.);
      printf ("Kapital: %7.2f EUR", kapital);
   }
   printf ("\n\nAus %7.2f EUR Grundkapital\n", GRUNDKAPITAL);
   printf ("wurden in %d Jahren %7.2f EUR\n", LAUFZEIT, kapital);
   return 0;
}



Ich habe spaßeshalber mal die #define's auskommentiert und mit den Datentypen int und float ersetzt.
Siehe da, das Programm funktioniert immer noch einwandfrei.

Was also bringt #define denn nun?

Meine Ideen:
Vielen Dank schonmal im vorraus.



Geschrieben von eulerscheZahl am 07.10.2016 um 16:34:

 

Eine Antwort hier: http://stackoverflow.com/questions/11079450/define-vs-variable
Du kannst Werte von #define nicht mehr (evtl. versehentlich) im Programm überschreiben.

Außerdem kannst du defines auch im Präprozessor abfragen und z.B. bedingte Kompilierung vornehmen (wenn Windows, binde diese Bibliothek ein, wenn Linux jene).



Geschrieben von Robert93 am 07.10.2016 um 16:54:

 

Okay Danke.
Ist #define dann nur eine Art Sicherheit um den konstanten Wert nicht zu überschreiben?
Weil theoretisch wenn man gut aufpasst könnte man das ja auch mit den int variablen vermeiden oder?
Das mit dem Präprozessor ist mit to high..



Geschrieben von eulerscheZahl am 07.10.2016 um 17:02:

 

Das mit dem Aufpassen ist so eine Sache. Wenn dein Programm nur groß genug wird, bist du vielleicht doch mal unachtsam.
Man kann eine Variable auch als const int deklarieren, dann lässt sie sich auf nicht mehr überschreiben.
Es bleibt aber eine Variable mit Adresse. Defines sind Textersetzungen, die vor dem Compiler ablaufen.

Ich sehe kein Problem darin, Konstanten im C-Code (also ohne #define) zu definieren.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH