1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Anfängerproblem

  • natty_dread
  • 18. November 2012 um 14:57
  • Unerledigt
  • natty_dread
    2
    natty_dread
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 18. November 2012 um 14:57
    • #1

    Hallo liebe ForumteilnehmerInnen!

    Ich beginne gerade damit, mich mit C zu beschäftigen und hänge bei folgendem Problem:
    Mein Programm soll das Volumen einer Kugel bzw. eines Würfels und deren Massen mithilfe der Dichte berechnen.

    Dafür will ich einen Header.h und zwei Module schreiben.

    In einem der Module sollen die Funktionen Definiert werden, im anderen das Hauptprogramm stehen.

    Das kompilieren der Funktionen zu einer .o Datei hat gut funktioniert, das Programm will jedoch nicht.

    Könntet ihr einen Blick darauf werfen?

    Mein Header.h sieht folgendermaßen aus:

    #include<stdio.h>


    #define rho 7.86;

    double VKugel(double a);
    double VWuerfel(double A);


    Das Programm ist:


    #include<stdio.h>
    #include"Header.h"
    #include<math.h>


    int main()
    {
    double r,m,M;

    printf("Gib einen Radius r ein: ");
    scanf("%lf", &r);

    printf("Das Volumen einer Kugel mit dem Radius r ist: %lf cm³\n",
    VKugel(r));
    printf("Das Volumen eines Wuerfels mit der Seitenlaenge r ist: %lf
    cm³\n", VWuerfel(r));

    m=VKugel(r)*rho;
    M=VWuerfel(r)*rho;

    printf("Die Masse einer Eisenkugel mit dem Radius r ist: %lf kg\n", m);
    printf("Die Masse eines Eisenwuerfels mit der Seitenlaenge r ist: %lf
    kg\n", M);

    return 0;
    }



    Als error Meldung beim Compilieren des Programms sagt der Compiler:

    Program.c:13: error: too few arguments to function ‘VKugel’
    Program.c:14: error: too few arguments to function ‘VWuerfel’
    Program.c:16: error: too few arguments to function ‘VKugel’
    Program.c:17: error: too few arguments to function ‘VWuerfel’

    Danke für eure Hilfe!

  • Paulchen
    1
    Paulchen
    Gast
    • 18. November 2012 um 15:07
    • #2

    Keine Ahnung, welchen Compiler du verwendest, aber mit gcc kompilert das (wenn man die Zeilenumbrüche innerhalb der Strings entfernt). VKugel und VWuerfel werden nicht bemängelt.

  • natty_dread
    2
    natty_dread
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 18. November 2012 um 15:20
    • #3

    Ich verwende auch gcc...

    Das seltsame ist, wenn ich die Funktionen und die Definition in das Hauptprogramm vor int main() gebe, und es einfach als Programm compiliere funktioniert es

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 18. November 2012 um 16:50
    • #4

    Mir ist nicht ganz klar: Die Deklarationen sind in Header.h enthalten, gut; aber in welcher Datei definierst du die Funktionen? Vielleicht könntest du auch die Funktionsdefinitionen posten, eventuell ist da etwas fehlerhaft (obwohl es unwahrscheinlich ist, weil das Programm ja funktioniert, wenn du die Definitionen in die Hauptdatei verschiebst).

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 18. November 2012 um 16:51
    • #5

    Was jedenfalls falsch ist:

    Code
    #define rho 7.86;

    Da musst du das Semikolon am Ende entfernen. Im konkreten Programm verursacht das zwar keine Probleme, weil du rho immer unmittelbar vor dem Ende der Anweisung benutzt, aber im allgemeinen Fall ist diese Definition falsch.

  • natty_dread
    2
    natty_dread
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 18. November 2012 um 17:00
    • #6

    Wenn ich das Semikolon einfach im Header entferne, dann spuckt der Compiler trotzdem die selben error Meldungen aus...

    Meine Funktionen sind:

    #include<stdio.h>
    #include<math.h>

    double VKugel(double a)
    {
    return (4./3)*M_PI*a*a*a;
    }

    double VWuerfel(double A)
    {
    return A*A*A;
    }

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 18. November 2012 um 20:39
    • #7
    Zitat von natty_dread

    Wenn ich das Semikolon einfach im Header entferne, dann spuckt der Compiler trotzdem die selben error Meldungen aus...

    Das Semikolon hat auch nicht mit diesen Fehlermeldungen zu tun.

    Zitat von natty_dread

    Meine Funktionen sind:

    #include<stdio.h>
    #include<math.h>

    double VKugel(double a)
    {
    return (4./3)*M_PI*a*a*a;
    }

    double VWuerfel(double A)
    {
    return A*A*A;
    }

    Alles anzeigen

    In welcher Datei hast du sie definiert, und wie bindest du diese Datei in das Programm ein?

  • emptyvi
    14
    emptyvi
    Logo 2012, Platz 2.
    Reaktionen
    102
    Punkte
    2.037
    Beiträge
    374
    • 18. November 2012 um 20:59
    • #8

    Hoioi!

    Das ganze kompiliert bei mir:

    Header.h

    Code
    #include<stdio.h>
    
    
    
    
    #define rho 7.86;
    
    
    double VKugel(double a);
    double VWuerfel(double A);

    prog.c

    Code
    #include<stdio.h>
    #include"Header.h"
    #include<math.h>
    
    
    int main()
    {
    double r,m,M;
    
    
    printf("Gib einen Radius r ein: ");
    scanf("%lf", &r);
    
    
    printf("Das Volumen einer Kugel mit dem Radius r ist: %lf cm³\n", VKugel(r));
    printf("Das Volumen eines Wuerfels mit der Seitenlaenge r ist: %lf cm³\n", VWuerfel(r));
    
    
    m=VKugel(r)*rho;
    M=VWuerfel(r)*rho;
    
    
    printf("Die Masse einer Eisenkugel mit dem Radius r ist: %lf kg\n", m);
    printf("Die Masse eines Eisenwuerfels mit der Seitenlaenge r ist: %lf kg\n", M);
    
    
    return 0;
    }
    Alles anzeigen

    func.c

    Code
    #include<stdio.h>
    #include<math.h>
    
    
    double VKugel(double a)
    {
    return (4./3)*M_PI*a*a*a;
    }
    
    
    double VWuerfel(double A)
    {
    return A*A*A;
    }
    Alles anzeigen

    Aufruf

    Code
    gcc -o prog func.c prog.c


    kompiliert ohne murren.

    Benutzung

    Code
    ./prog
    Gib einen Radius r ein: 5
    Das Volumen einer Kugel mit dem Radius r ist: 523.598776 cm³
    Das Volumen eines Wuerfels mit der Seitenlaenge r ist: 125.000000 cm³
    Die Masse einer Eisenkugel mit dem Radius r ist: 4115.486376 kg
    Die Masse eines Eisenwuerfels mit der Seitenlaenge r ist: 982.500000 kg

    geht auch.

    Was Adok meinte, ist, dass das define einfach dumm "Suchen und Ersetzen" macht. überall wo du roh stehen hast wird bei dir also "7.86;" eingesetzt. Da roh bei dir immar am Zeilenende steht, ergeben sich daraus dann Zeilen "irgendwas 7.86;;". Würdest du roh allerdings irgendwo in der Zeile benutzen, und nicht am Ende, würdest du durch den Strichpunkt Probleme bekommen.

    Für alles weitere räume ich den Platz für Leute, die sich mit C besser auskennen, als ich :grinning_squinting_face:

    l.g.


    ¤¸¸.•´¯`•¸¸.•..>> Join the herd, join "My Little Pony @ TU-Wien" <<..•.¸¸•´¯`•.¸¸¤
    ¤¸¸.•´¯`•¸¸.•..>> (100% Twilight Sparkle approved) <<..•.¸¸•´¯`•.¸¸¤


    PP-Tutor WS2011 - WS2014
    EVC-Tutor SS2015


  • natty_dread
    2
    natty_dread
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 18. November 2012 um 22:15
    • #9

    Adok:

    Ich compiliere mittels
    gcc -c -Wall -O -o Funktion.o Funktion.c => das funktioniert toll.
    gcc -c -Wall -O -o Program.o Program.c => das gibt mir die oben angegeben Fehlermeldungen.


    emptyvi: ich wollte beide Programme von .c auf .o compilieren um sie dann mittels

    gcc -O -Wall -lm -o Program Program.o Function.o zusammenzufügen.

    Hat jemand eine Idee warum das nicht funktioniert?

  • emptyvi
    14
    emptyvi
    Logo 2012, Platz 2.
    Reaktionen
    102
    Punkte
    2.037
    Beiträge
    374
    • 18. November 2012 um 22:23
    • #10
    Zitat von natty_dread


    Hat jemand eine Idee warum das nicht funktioniert?

    Ich zumindest nicht, denn bei mir funktioniert das ebenfalls einwandfrei:

    Code
    blah@blub ~/Test/C-Zeug $ ls
    func.c  Header.h  prog.c
    blah@blub ~/Test/C-Zeug $ gcc -c -Wall -O -o func.o func.c
    blah@blub ~/Test/C-Zeug $ gcc -c -Wall -O -o prog.o prog.c
    prog.c: In Funktion »main«:
    prog.c:11:6: Warnung: Der Rückgabewert von »scanf«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]
    blah@blub ~/Test/C-Zeug $ gcc -O -Wall -lm -o prog prog.o func.o
    blah@blub ~/Test/C-Zeug $ ./prog
    Gib einen Radius r ein: 5
    Das Volumen einer Kugel mit dem Radius r ist: 523.598776 cm³
    Das Volumen eines Wuerfels mit der Seitenlaenge r ist: 125.000000 cm³
    Die Masse einer Eisenkugel mit dem Radius r ist: 4115.486376 kg
    Die Masse eines Eisenwuerfels mit der Seitenlaenge r ist: 982.500000 kg
    blah@blub ~/Test/C-Zeug $
    Alles anzeigen


    ¤¸¸.•´¯`•¸¸.•..>> Join the herd, join "My Little Pony @ TU-Wien" <<..•.¸¸•´¯`•.¸¸¤
    ¤¸¸.•´¯`•¸¸.•..>> (100% Twilight Sparkle approved) <<..•.¸¸•´¯`•.¸¸¤


    PP-Tutor WS2011 - WS2014
    EVC-Tutor SS2015


  • natty_dread
    2
    natty_dread
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 18. November 2012 um 22:25
    • #11

    Seltsam.

    Danke für eure Hilfe!

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 19. November 2012 um 15:52
    • #12
    Zitat von natty_dread

    Adok:

    Ich compiliere mittels
    gcc -c -Wall -O -o Funktion.o Funktion.c => das funktioniert toll.
    gcc -c -Wall -O -o Program.o Program.c => das gibt mir die oben angegeben Fehlermeldungen.


    Mit gcc habe ich nicht so viele Erfahrungen, jedoch fällt mir auf, dass in der zweiten Zeile Funktion.o nicht vorkommt. Da Program.c auf die dort definierte Funktion zugreifen muss, muss Funktion.o irgendwie verlinkt werden.

  • Paulchen
    1
    Paulchen
    Gast
    • 19. November 2012 um 15:53
    • #13
    Zitat von Adok

    Mit gcc habe ich nicht so viele Erfahrungen, jedoch fällt mir auf, dass in der zweiten Zeile Funktion.o nicht vorkommt. Da Program.c auf die dort definierte Funktion zugreifen muss, muss Funktion.o irgendwie verlinkt werden.

    Das sind ja nur die Schritte zum Kompilieren. Das Linken erfolgt dann mit

    Code
    gcc -O -Wall -lm -o Program Program.o Function.o


    Das passt schon so.

  • CwieZebra
    3
    CwieZebra
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    11
    • 17. Dezember 2012 um 18:20
    • #14

    Naja, zwischen Function.o und Funktion.o besteht ja ein kleiner Unterschied.

    Eventuell liegt da ja der Fehler, also dass von einer früheren Kompilation noch ein Function.o vorhanden ist?

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung