seit welchen C-Standard sind korrekte Funktionsprototypen Pflicht
-
Genmutant schrieb:
IMHO schon seit dem ersten Standard (C89)
meinste? wenn's 'pflicht' wäre, müsste der compiler doch errors ausspucken. bei meinen ollen C89-compilern kommen nur warnings.
-
Tatsache... wieso mach ich dann immer so nen Aufwand den Murks da reinzuschreiben ^^
-
Genmutant schrieb:
Tatsache... wieso mach ich dann immer so nen Aufwand den Murks da reinzuschreiben
na, weils ohne den murks nicht geht. compiled zwar, läuft aber meist nicht richtig.
-
Ja das hatte ich auch gedacht... Aber bei meinen beiden Tests grad hat das wunderbar geklappt -.- nichmal ne Warnung kam, trotz -Wall
-
erik.vikinger schrieb:
seit welchen C-Standard sind korrekte Funktionsprototypen Pflicht?
In gar keinem.
also sowas verboten
int printf(); //ungenügender Funktionsprototyp
Kleine Anmerkung zum Sprachgebrauch: Das ist eine einfache Funktionsdeklaration, kein Prototyp, auch kein ungenügender, unvollständiger oder sonstiger Prototyp.
-
Genmutant schrieb:
Ja das hatte ich auch gedacht... Aber bei meinen beiden Tests grad hat das wunderbar geklappt -.- nichmal ne Warnung kam, trotz -Wall
probier doch mal 'puts(1)', oder so. das dürfte direkt abstürzen.
-
#include<stdio.h> void ausgabe(); int main() { ausgabe("abc"); return 0; } void ausgabe(char wort[]){ int i=0; while (wort[i]){ printf("%c",wort[i]); i++; } }
Das läuft bei mir ohne irgendwelche Mäkeleien. (Bitte kein Kommentar zu der Funktion...
)
-
Genmutant schrieb:
Das läuft bei mir ohne irgendwelche Mäkeleien. (Bitte kein Kommentar zu der Funktion...
die leere klammer bei 'void ausgabe();' heisst: 'beliebige anzahl von argumenten'. wenn du dann noch zufälligerweise das richtige übergibst läufts natürlich. mach: ausgabe(0); und schon schmiert es ab.
-
Naja gut, aber das passiert auch wenn ich vorher
void ausgabe(char wort[]);
angebe. Kommt höchstens ne kleine Warnung vom Compiler dass der integer kein pointer ist... Aber keine Fehlermeldung. Funktioniert natürlich dann trotzdem nicht.
Aber ich verstehe zumindest jetzt worauf du rauswolltest
-
Genmutant schrieb:
Kommt höchstens ne kleine Warnung vom Compiler dass der integer kein pointer ist... Aber keine Fehlermeldung.
deswegen sollte man warnings besser immer beachten. und prototypen oder deklarationen (oder wie auch immer ihr's nennen wollt), sind zwar keine pflicht, aber ehrensache.
-
Hallo,
;fricky schrieb:
sind zwar keine pflicht
Schade, in C++ ist das Pflicht. Ich dachte das hätte man mit einem der letzten Standards nun endlich auch für C korrigiert.
;fricky schrieb:
aber ehrensache.
Full ACK
Danke für Eure Beiträge
Erik
-
Hallo,
Bashar schrieb:
Kleine Anmerkung zum Sprachgebrauch: Das ist eine einfache Funktionsdeklaration, kein Prototyp, auch kein ungenügender, unvollständiger oder sonstiger Prototyp.
Ja ich weiß, ich hätte beim Funktionsaufruf schreiben sollen das dieser nicht zur Deklaration passt. Bitte entschuldige, ich hatte das Beispielzeugs vorhin nur so mal schnell eingetippt und nicht in voller Tiefe drüber nachgedacht, ich wollte eben nur veranschaulichen was ich eigentlich meine.
Grüße
Erik
-
Sorry, das war nicht gegen dich, aber die meisten machen das falsch und denken, ein Prototyp ist dasselbe wie eine Funktionsdeklaration.
-
Ist also http://de.wikipedia.org/wiki/Funktionsprototyp auch falsch? Was ist denn ein Prototyp?
-
Nichtswisser schrieb:
Ist also http://de.wikipedia.org/wiki/Funktionsprototyp auch falsch? Was ist denn ein Prototyp?
steht doch da, der mit rückgabewert und parameterliste ist ein prototype (weil der compiler dann weiss, wie eine funktion aufzurufen ist). demnach ist ein: int hallo(); keiner, weil die parameter fehlen. sinnlose erbsenzählerei, aber manche stehen nun mal auf sowas.