lokale funktion definiert globale neu, wie die globale aufrufen?
-
conio schrieb:
doch das geht. solange sie argumente vom gleichen typ haben haben.
int f() { return 3; } int f() { return 4; } int main() { printf("%i\n", f()); return 0; }
Ah, ja.
-
fragesteller schrieb:
wie geht das nochmal, wenn ich mir z.b. selber ne funktion
void clrscr()
{}schreibe welche die aus conio überdeckt aber die aus conio.h aufrufen möchte ?
Wie schon erwähnt, ist das in C nicht möglich. Aber du kannst Makros dafür missbrauchen:
void my_clrscr(void) { // bla } #define clrscr my_clrscr
-
groovemaster schrieb:
Wie schon erwähnt, ist das in C nicht möglich.
DOch das geht, probierts doch aus.
-
fragesteller schrieb:
groovemaster schrieb:
Wie schon erwähnt, ist das in C nicht möglich.
DOch das geht, probierts doch aus.
Besser noch: zeig uns wie's geht. Bin gespannt.
-
so :
#include <stdio.h>
#include <conio.h>void clrscr()
{
printf("Hallo ihr Nulpen");
}void main ()
{
clrscr();
getchar();
}
-
*loool* wird wohl daran liegen das in der conio.h die clrscr() schon seit 1800 nicht mehr existiert
-
Cpt.Tanga schrieb:
*loool* wird wohl daran liegen das in der conio.h die clrscr() schon seit 1800 nicht mehr existiert
Nö, mein Compiler ist nämlich von 1800 (bzw. noch nach C89 Standard) du vorwitziger Nasenbär.
-
fragesteller schrieb:
Nö, mein Compiler ist nämlich von 1800 (bzw. noch nach C89 Standard) du vorwitziger Nasenbär.
Und? Hat er clrscr()?
-
Shade Of Mine schrieb:
fragesteller schrieb:
Nö, mein Compiler ist nämlich von 1800 (bzw. noch nach C89 Standard) du vorwitziger Nasenbär.
Und? Hat er clrscr()?
Ja, hat er.
Und ich kann es redefinieren, wie schon in meinem allerersten Post eindeutig gesagt.
-
Jaja. Es gibt zwei Möglichkeiten:
(a) die conio-Bibliothek wird erwartungsgemäß dazugelinkt -> der Linker sollte sich beschweren.
(b) die conio-Bibliotheken wird nicht dazugelinkt -> das Programm verhält sich (trivialerweise), wie von fragesteller beschrieben, aber das geht am Punkt vorbei.de$ cat > t.c #include<stdio.h> void test(void) { puts("test in t.c"); } de$ cat > u.c #include<stdio.h> void test(void); void test(void) { puts("test in u.c"); } int main(void) { test(); return 0; } de$ gcc t.c -c de$ gcc u.c -c de$ gcc t.o u.o -o u u.o(.text+0x0): In function `test': : multiple definition of `test' t.o(.text+0x0): first defined here collect2: ld returned 1 exit status de$ gcc u.o -o u de$ ./u test in u.c de$
-
Je nach Qualität des Linkers, kann es auch so sein das er nur eine Warning ausgibt mit der Information das er die lokal im Source definierte Funktion nutzt und nicht die Funktion aus der statischen library.
Ist mir bisher 2 mal vorgekommen einmal um 1990 mit eine C-Compiler für DOS.
und bei einem C-Cross Compiler für Z80 und 8051 auch um die Zeit.Im Handbuch des Cross-Compilers wurde auch darauf hingewiesen, das falls im Source-Code eine Funktion mit dem selben Namen wie in den mitgelieferten Libraries vorkommt diese ausgewählt wird.
Ist aber für Compiler die unter einem Betriessystem arbeiten nicht mehr zeitgemäß.
-
PAD schrieb:
Je nach Qualität des Linkers, kann es auch so sein das er nur eine Warning ausgibt mit der Information das er die lokal im Source definierte Funktion nutzt und nicht die Funktion aus der statischen library.
Ist mir bisher 2 mal vorgekommen einmal um 1990 mit eine C-Compiler für DOS.
und bei einem C-Cross Compiler für Z80 und 8051 auch um die Zeit.Im Handbuch des Cross-Compilers wurde auch darauf hingewiesen, das falls im Source-Code eine Funktion mit dem selben Namen wie in den mitgelieferten Libraries vorkommt diese ausgewählt wird.
Ist aber für Compiler die unter einem Betriessystem arbeiten nicht mehr zeitgemäß.
endlich versteht mich einer. Aber die überdeckte aufrufen geht wohl nicht? Schade...
-
fragesteller schrieb:
endlich versteht mich einer.
Jo, er hat verstanden was du meinst und schoen erklaert warum das bloedsinn ist
Ich hab halt nur gesagt "bloedsinn"
-
Die Frage ist doch nicht ob wir ihn sondern ob er uns versteht
-
Shade Of Mine schrieb:
fragesteller schrieb:
endlich versteht mich einer.
Jo, er hat verstanden was du meinst und schoen erklaert warum das bloedsinn ist
Ich hab halt nur gesagt "bloedsinn"
Ich kann nirgends erkennen, dass er das für Blödsinn befunden hat. Das ist alleine deine unfreundliche Erfindung, weil nicht sein darf, was du nicht kennst.