Witam
Czy jest coś takiego dostępne ? Np jak moduły w ruby. Przykładowo ze pisze moduł "math", definiuje w nim funkcje a później używam "math.square ; math.multiple" itp ? Chodzi mi zarówno o C jak i o C++.
Wątek przeniesiony 2018-06-14 15:49 z Delphi i Pascal przez kq.
Witam
Czy jest coś takiego dostępne ? Np jak moduły w ruby. Przykładowo ze pisze moduł "math", definiuje w nim funkcje a później używam "math.square ; math.multiple" itp ? Chodzi mi zarówno o C jak i o C++.
C++ ma klasy i przestrzenie nazw. C - nie.
Może jednak ktoś zna jakas opcje w C żeby cos chociaż jakąś namiastkę tego przypominało ?
Możesz robić to co wszystkie biblioteki i dodawać odpowiedni prefix. Np. funkcje Open MP mają nazwy zaczynające się od omp_
.
Czyli ze co miałbym zrobić ?
Nazwać wszystkie funkcje z jednego pliku w taki sposób, aby zawierały taki sam prefiks, np. mth_square
, mth_multiple
itd. Coś taki niekumaty?
Chodzi o to żebym napisal swoją bibliotekę zawierająca funkcję z takimi samymi prefiksami ?
Tu masz przykład API C dostarczonego przez Apple:
https://developer.apple.com/documentation/corefoundation/cfstream?changes=_8&language=objc
Nazwy funkcji C w tym wypadku mają taki format:
<DwuLiterowyPrefixBiblioteki><NazwaStruktury/kalsy><NazwaWłaściwaFunkcji>
IMO to jest dobra praktyka.
Ewentualnie możesz sobie stworzyć obiekt, który będzie miał przypisane wskaźniki na funkcje. Trochę mniej wygodne w użyciu, ale może czasami być tez przydatne.
Nie, nie chodziło mi o pisanie swojej biblioteki, bo to wiadomo ze można zrobić. Szukam bardziej możliwości języka które coś takiego pozwoliłyby mi zrobić ale chyba w C jednak czegoś takiego nie znajdę... No ale pomijając tworzenie bibliotek to jakie działanie w języku C byłoby najbliższe takiemu efektowi ?
Funkcje w C grupuje się w pliki nagłówkowe. Ponieważ nie ma klas czy przestrzeni nazw, żeby unikać kolizji (sytuacji kiedy są dwie różne funkcje z różnych bibliotek o tych samych nazwach) oraz niejasności (z jakiej biblioteki jest funkcja open
?) dobrym nawykiem jest odpowiednie nazywanie tych funkcji, ale o tym już ci kilkakrotnie powiedziano.
No ok, dziękuję za pomoc