Aufgabe 1 für Anfänger

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 1 für Anfänger
Ich als blütiger Anfänger wollte ein Paar Dinge zusammenfassen, die für Anfänger wichtig sein könnten. Was mir bisher eingefallen ist:

  • falls malloc versagt, soll das Programm mit Fehlermeldung abgebrochen werden;
  • globale Variablen sollen static sein;
  • main sollte int sein und 0 zurückgeben.
    dass das Programm ANSI-POSIX- Kompatibel sein soll, weiß wohl jeder… fällt euch noch was ein?
    bzw. korrigiert mich falls…

edit: eins noch: nicht vergessen, Speicher muss an BS zurückgegeben werden.


Warum sollen globale Variablen bitte static sein?
Das macht in meinen Augen nun wirklich keinen Sinn.
Für welche globale Instanz soll denn das static gelten?


also des mit static kommt schon hin, in der vorlesung wurde doch gesagt wenn globale variabeln dann bitte static ( also static im sinne von nur global in der einen datei).


naja Sinn is letztlich die frage bei sowas…
wir wollen ja der Datenkapselung gerecht werden :cheesy:
und wenn dir z.b. bei aktuellem Programm jemand von aussen deinen “head” modifiziert, waere das net so gut.


mein ich doch :smiley:


tut mir leid ich hab noch geschrieben wo du schon gepostet hattest :slight_smile:


Und wie soll jemand das machen?
Sich per Kernelhack in die gleiche Speicherseite wie mein Programm einnisten und dann darauf zugreifen?

Oder sich meine queue.c schnappen und dann mit „head“ rumpfuschen?

Klar gibt’s in einem größeren Projekt Probleme wenn es nun 100erte "head"s gäbe. Aber hier…


naja auf jeden fall wurde das von juk in der vorlesung gesagt das es so gemacht werden soll, und wenn man das immer macht wenn man nicht vorhat die variabeln auch in anderen dateien verfügbar zu machen seh ich da kein grosses problem und es macht das program doch letzten endes nicht unübersichtlicher (ich will damit nur sagen das ich auch static habe und das ich im recht bin :D)


Frage an die Profis. Beim Kompillieren kommt ein Warning:

warning: incompatible implicit declaration of built-in function ‘malloc

Warnings dürfen wir nicht haben, soviel ich weiß. Mein Lösungsansatz war, malloc, free und exit explizit(eventuell in einer Header- Datei) zu deklarieren; so meckert gcc nicht mehr. Hab ein Gefühl, irgendwie auf einer falschen Schiene zu sein. Wie habt ihr das gelöst?


#include <stdlib.h>


@hehejo:
wenn du es nicht static hast kannste mittels “extern” von anderen Modulen darauf zugreifen.
Die queue.c soll ja nur ermoeglich dass du append() und remove() anwenden kannst.
(korregiert mich mal wenn ichn scheiss erzaehl ^^)


hehejo:
Das ist wohl mehr eine Frage des Styles und ggf. der Wiederverwendbarkeit. Deine queue.c koennte ja jemand weiterverwenden, und wenn du die globalen Variablen nicht static machst, duerfte er darauf rumschreiben. Das bringt allerdings deine Warteschlange aus dem Konzept. Soll ja alles nur Uebung sein hier, deswegen sollte man die Sichbarkeit der Variablen nur soweit wie noetig oeffnen :slight_smile:


Hey Leute!

Ich hab die Liste fertig und sie funktioniert. Man soll ja keine Warnings bekommen, ich hab allerdings welche:

Missing prototype for 'remove_element()'

obwohl ich die methode zu beginn deklariert habe…

was kann das sein?


Wie hast du sie denn deklariert?


MuMu: Die Deklaration muss vor dem ersten Aufruf erfolgen. Rufst du die Funktion in main() auf, deklarierst sie jedoch erst nach main(), gibts eine Warnung. Entweder eben vor main() hinverschieben oder den Prototyp vor main() hinschreiben.
Prototyp hat die Form

returnwerttyp funktionsname(parametertyp1 [name1], ..., parametertypN [nameN]);

ich hab ganz am anfang stehn

int remove_element();

und zwar wirklich ganz am anfang…und main steht sowieso ganz zum schluss…ich check des net wirklich^^


Poste mal den Code. Ohne die ausprogrammierten Funktionen natürlich. Aber so, dass der Fehler noch auftaucht.


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

int remove_element();
void append_element(int value);

...

int remove_element() {
...
return...
}


void main(void) {
	append_element(47);
	append_element(11);
	append_element(42);
	printf("remove: %d\n", remove_element());
	printf("remove: %d\n", remove_element());
	printf("remove: %d\n", remove_element());
	printf("remove: %d\n", remove_element());
	append_element(13);
	printf("remove: %d\n", remove_element());
}


Hi,

komisch bei mir siehts genauso aus und alle läuft wunderbar ohne warnings. Probiers doch mal mit int remove_element(void); Keine Ahnung vielleicht hast du einfach einen etwas seltsamen compiler…