Deklaracje funkcji w stdio.h a ich definicje.

0

Witam.

Mam taki problem. Mianowicie mamy sobie plik nagłówkowy (zwany też biblioteką standardową): stdio.h. I w niej/nim jest troszkę deklaracji różnych funkcji.

I teraz moje pytanie brzmi:
Gdzie są ich definicje??

W szczególności interesowałaby mnie lokalizacja definicji funkcji rename
(prototyp: _CRTIMP int __cdecl rename (const char, const char); )

Z góry bardzo dziękuję za pomoc.</b>

0

definicje są z reguły w skompilowanym pliku .a, .lib albo innym takim. jak chcesz źródła, to komercyjne kompilatory ich mogą nie udostępniać.
libc udostępnia źródła na pewno. google + "libc source" albo coś w tym stylu.

0
pzak napisał(a)

W szczególności interesowałaby mnie lokalizacja definicji funkcji rename

U mnie jest to plik rename.c.

0

Hmm....

To może przedstawię cały problem :]

Otóż mam do napisania projekt (pod windowsem), w którym mam dodać jakąś nową funkcję do biblioteki już istniejącej w sytemie czy w jakimś programie. W bibliotece mają być zawarte funkcje o podobnej tematyce do mojej funkcji. I teraz mam sobie moją funkcję masowo zmieniającą nazwy plików i chciałbym ją dodać do biblioteki, w której znajduje się funkcja rename.

I dlatego jej poszukuję :]

0

Hmm nie wiem czy to przejdzie, ale możesz przecież dodać do przestrzeni nazw std swoją funkcję. Piszesz sobie swój plik nagłówkowy, dodajesz nagłówek z funkcją rename a potem siepiesz swoje funkcje...

0

Tylko, że ja mam to dodać do biblioteki lib albo dll, więc raczej nie przejdzie :/

0

A cóż to za problem.
Założenia:

  • biblioteką do "wzbogacenia" niech będzie libc.lib
  • plik z nową funkcją niech się nazywa rename.c
  • funkcja do dodania niech się nazywa rename i niech będzie stdcall, aby wyeliminować ewentualne duplikaty (cdecl rename(...) istnieje w libcmt.lib)
  1. Skopiuj libc.lib do jakiegoś pustego folderu (na przykład c:\temp) i utwórz w tym folderze plik rename.c
  2. wklej to do pliku rename.c:
    int __stdcall rename(char* dir)
    {
    return 0;
    }

    i skompiluj, na przykład poleceniemcl /c rename.cPowstanie plik rename.obj który dołączymy do biblioteki libc.lib, w taki oto sposób:link -lib libc.lib rename.obj
    Jeśli plik rename.obj już istniał w bibliotece pod tą samą nazwą, to zostanie zastąpiony przez nowy, a link.exe wypluje stosowną informację.

Od tej pory w bibliotece libc.lib dostępna jest dodatkowa funkcja stdcall rename(), jeśli jesteś pewny że warto ją tam mieć, to zastąp plik libc.lib w folderze kompilatora na ten ulepszony.

0

Wszystko ładnie pięknie, jednakże w systemie nie mam takich plików jak libc.lib i libcmt.lib (domyślam się, że musiałbym mieć zainstalowany kompilator microsoftu, żeby te pliki istniały u mnie) a oryginalna funkcja cdecl rename() działa, więc musi być zdefiniowana w innej bibliotece, prawda??

0

To użyj jakiegokolwiek pliku lib*.a, a zamiast link.exe użyj ar.exe który jest w /bin
ar -r libstdc++.a convert.o
libstdc++.a - to jedna z bibliotek dev-cpp

0

oryginalna funkcja cdecl rename() działa, więc musi być zdefiniowana w innej bibliotece, prawda??

O ile dobrze rozumiem to odpowiedź brzmi: tak, ale jest w postaci skompilowanej. Jak piszesz program to żeby działał nie musi być z nim źródeł, prawda? ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0