C #include eigene Dateien?

Hallo, könnt ihr mir weiterhelfen?

Ich bin noch ein ziemlicher Anfänger in C und hab einige Übungsdateien programiert. Funktioniert alles wunderbar.
Jetzt möchte ich eigene Headerdateien in mein Script laden. Wie muss ich das machen?

Das sind meine bisherigen Codes:

Main:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "Auslagern.h"



int main()
{
float ergebnis, var;
int abfrage;


do{
printf("<1> Kreisflaeche\n");
printf("<2> Kreisdurchmesser\n");
printf("<3> Kreisumfang\n");
printf("<4> Programmende\n\n");

printf("Bitte auswaehlen:< >\b\b");
scanf("%d",&abfrage);
getchar();

system("cls");




switch(abfrage)
{
  case 1: printf("Geben Sie den Durchmesser ein[cm].\n");
          scanf("%f", &var);
          ergebnis=kreis_area(var);
          ergebnis_ber(ergebnis, abfrage);
          getchar();
          system ("pause");
          system("cls");
          break;
          
  case 2: printf("Geben Sie die Flaeche ein.\n");
          scanf("%f", &var);
          ergebnis=kreis_durchmesser(var);
          ergebnis_ber(ergebnis, abfrage);
          getchar();
          system ("pause");
          system("cls");
          break;
          
  case 3: printf("Geben Sie den Durchmesser ein.\n");
          scanf("%f", &var);
          ergebnis=kreis_umfang(var);
          ergebnis_ber(ergebnis, abfrage);
          getchar();
          system ("pause");
          system("cls");
          break;
  case 4: printf("Programmende.");
  system ("pause");
  system("cls");
          break;
  default:printf("Unbekannte Auswahl.");
  system ("pause");
  system("cls");
}
} while(abfrage!=4);

  system("PAUSE");    
  return 0;
}
und das die header Datei:

Code:
#define AUSLAGERN "C:/Users/Tim/Desktop/Programieren/C/Mathe Programm/Auslagern.h"
float pi=3.1415;

float kreis_area(float d)
{
     return d*d*pi/4;     
}

float kreis_durchmesser(float flaeche)
{
    return (sqrt(4*flaeche/pi));    
}
float kreis_umfang(float d)
 {
      return(d*pi);     
 }

void ergebnis_ber(float erg, int welche)
{
     if (welche==1)
     printf("Kreisflaeche : %.2f\n",erg);
     else if(welche==2)
     printf("Kreisdurchmesser : %.2f\n",erg);
     else if(welche==3)
     printf("Kreisumfang : %.2f\n",erg);
     
}
wie funktioniert das, dass ich die Einbinde?

Vielen Dank schonmal im Vorraus.

Lg Tim
 
In C/C++ sollte ein Header immer so aussehen:
Code:
#ifndef STRINGWHICHCONTAINSTHENAMEOFTHEFILE
#define STRINGWHICHCONTAINSTHENAMEOFTHEFILE

...

#endif
So was nennt man dann einen Include-guard, und der verhindert das mehrfache inkludieren eines Headers. Üblicherweise wählt man für den String etwas in der Art (Header heißt foo.h): FOO_H

In den Header musst du dann die Definitionen packen, kannst wenn du willst aber auch die Implementierung dazu tun.

Auslagern.h
Code:
#ifndef AUSLAGERN_H
#define AUSLAGERN_H

static const float pi=3.1415;

float kreis_area(float d)
{
     return d*d*pi/4;     
}

float kreis_durchmesser(float flaeche)
{
    return (sqrt(4*flaeche/pi));    
}
float kreis_umfang(float d)
 {
      return(d*pi);     
 }

void ergebnis_ber(float erg, int welche)
{
     if (welche==1)
     printf("Kreisflaeche : %.2f\n",erg);
     else if(welche==2)
     printf("Kreisdurchmesser : %.2f\n",erg);
     else if(welche==3)
     printf("Kreisumfang : %.2f\n",erg);
     
}

#endif
Dafür kannst du dann zum Bauen den gleichen Befehl verwenden wie bisher, ich nehme mal an du verwendest den gcc:
Code:
gcc main.cpp -o myprogram

Oder, wenn du den Build-Vorgang etwas optimieren willst, verschiebst die Implementierung in ein eigenes Source-File:

Auslagern.h
Code:
#ifndef AUSLAGERN_H
#define AUSLAGERN_H

static const float pi=3.1415;
float kreis_area(float d);
float kreis_durchmesser(float flaeche);
float kreis_umfang(float d);
void ergebnis_ber(float erg, int welche);

#endif

Auslagern.cpp
Code:
#include "Auslagern.h"

float kreis_area(float d)
{
     return d*d*pi/4;     
}

float kreis_durchmesser(float flaeche)
{
    return (sqrt(4*flaeche/pi));    
}
float kreis_umfang(float d)
 {
      return(d*pi);     
 }

void ergebnis_ber(float erg, int welche)
{
     if (welche==1)
     printf("Kreisflaeche : %.2f\n",erg);
     else if(welche==2)
     printf("Kreisdurchmesser : %.2f\n",erg);
     else if(welche==3)
     printf("Kreisumfang : %.2f\n",erg);
     
}

Da kannst du dann die Implementierung eigens kompilieren, musst die Objekt-Datei aber dem Linker mit übergeben:
Code:
gcc -c Auslagern.cpp -o Auslagern.o
gcc -c main.cpp -o main.o
gcc Auslagern.o main.o -o myprogram

Ein kleiner Hinweis noch: Mit den Konstanten (die übrigens dann auch const sein sollten) musst du beim Linken aufpassen, nicht dass dir die Symbole mehrfach auftauchen. Dabei empfehle ich diese Seite als Lektüre. Noch einfacher wäre es natürlich M_PI aus der math.h.

mfg benediktibk
 
Zuletzt bearbeitet:
Um aus dem Dreizeiler zum Kompilieren einen Einzeiler zu machen, kannst du dir dann noch ein Makefile schreiben. Das würde z.B. so aussehen:
Code:
myprogram: auslagern.o main.o
	gcc main.o spi_stuff.o -o myprogram
  
main.o: main.c
	gcc -c main.c
  
auslagern.o: auslagern.c
	gcc -c auslagern.c
Wenn du das in eine Datei mit dem Namen "Makefile" schreibst, kannste alles kompilieren mit:
Code:
make
:)
 
Zurück
Oben