pre-ANSI C-Funktionen

R

rikola

Foren Gott
Hallo,
ich soll gerade C-Code portieren, der schon etwas aelter ist.
Ich bin auf eine folgendes Konstrukt gestossen:
Funktionsdeklaration:
Code:
int foo (char* a, char* b, int c);
Funktionsaufruf:
Code:
foo (a,b);
d.h., die Funktion wird mit nur zwei Argumenten aufgerufen, obwohl fuer das dritte kein default-Argument angegeben ist.

Das Programm kompiliert unter SGI IRIX - allerdings weiss ich nicht, welche Version und welcher Compiler.

Mit einem aktuellen gcc kompiliert das Programm offenbar nicht mehr.

Entweder ist dies also ein Feature des SGI-Compilers und/oder eine vor-Standard-Variante.

Was ich gerne wuesste ist, wie das dritte Argument gesetzt wird - ich vermute, auf 0, allerdings wuesste ich trotzdem gerne, wie der Compiler damit umgeht.

Google hat mir noch nicht weitgergeholfen, vielleicht hat hier ja jemand eine Ausgabe von Kernighan&Ritchie zur Hand.
 
Kommt drauf an von welchem Typ a und b sind. Wenn ich mich nicht irre wird von links beginnend immer bei passendem Datentyp die formale Variable der Aktuellen zugewiesen.
Probier einfach mal mit verschiedenen Variablenzuweisungen rum und lass dir das Ergebnis ausgeben.

EDIT
Sorry, überlesen, dass aktuelle Compiler das nicht mehr schlucken. Versuche doch einfach den Variablen einen Defaultwert zuzuweisen.
ala:

int foo (char* a="test", char* b="test2", int c=0)

Wenn ich mich nicht irre werden dann bei fehlender Variablen der Defaultwert benutzt. Jedenfalls klappt das bei Konstruktoren in C++.
 
Zuletzt bearbeitet:
Vielen Dank. Das Verhalten bei default-Parametern ist mir allerdings bekannt. Das Problem ist, dass das Programm nicht von mir ist, und wenn ich nun einen default-Wert eintrage, der vom SGI-Compiler so nicht eingesetzt wird, aendere ich das Programm in seiner Funktionsweise. Das geht nicht.

Daher wuesste ich gerne, was alte Compiler (besonders auf IRIX) dort eingesetzt haben.
 
Hast Du die Funktion "foo" schon mal genauer untersucht ?

Wird "c" so verwendet, das man nicht schlau draus wird ?

Heiko
 
Ich würde mir 'c' einfach mal ausgeben lassen um zu sehen mit welchen Wert die Variable belegt wird.
 

Ähnliche Themen

Xubuntu - AVR32-linux crosscompile sqlite

tilp lässt sich nicht installieren

OpenSuse 11.1 USB Festplatte wird nicht erkannt

Superkaramba @ Debian FEHLER????

Compileroptionen

Zurück
Oben