standardy C, ktory lepszy?

0

jak wiadomo zalozeniem c jest to ze ma dzialac wszedzie.
wiec moje pytanie, jakiego standardu sie trzymac? jakich funkcji uzywac do ingerencji w os?

czy ansi c ma jakikolwiek sens? funkcje typu fopen, etc?

0

"Jak wiadomo" - pierwsze slysze mowiac szczerze. Dzialac wszedzie to ma np. Java. C ma byc szybki. Ja mimo wszystko korzystalbym z c++ i stla.

0

Jeżeli chcesz mieć jakąś sensowną przenośną funkcjonalność w C lub C++ musisz do tego użyć dodatkowych przenośnych bibliotek jak GLib lub Qt np.

Jak wiadomo wszędzie w C działa absolutne minimum. Nie mówiąc już że nawet zakres zmiennych zależą od architektury kompa ...

0

Porady Mozilli na temat pisania przenośnego kodu (C++, ale także C):

https://developer.mozilla.org/en/C___Portability_Guide

Radzę to sobie przefiltrować, bo niektóre wydają się... kontrowersyjne, czy może raczej "lekko przestarzałe". Praktycznie zabraniają tam używania wyjątków, czy STL-a, ale akurat te wytyczne Cię nie dotyczą, jeśli masz zamiar używać tylko C. Ale może znajdziesz tam też jakieś porady przydatne dla Ciebie.

0

czyli jak, asm?
skoro przenosnosc to java, to po co meczyc sie w c, skor i tak nie pojdzie gdzie chce?

aha i zalezy mi zeby dzialal tylko na linuxie/bsd/etc, winzgrozy i mac mnie nie obchodza.

0

No asm to jest dopiero przenosny, nie ma co...

Co do meki - jezyk to tylko narzedzie, dla jednym to meka, dla innych zabawa. Java pojdzie 'prawie' wszedzie, wiec nie zastanawialbym sie dlugo, jesli to wlasnie przenosnosc jest najwazniejsza.

0

chodzi mi o to, ze chcialbym sie dowiedziec jakie panuja standardy w tym.
czyli w czym pisac, by program trafil do jak najwiekszej ilosci odbiorcow. programy nie zbyt skomplikowane, glownie narzedzia np do sprawdzania www czy parsowania danych.

uwazam ze C, ale teraz jakie biblioteki?
posix - raczej tak
ansi - nie za bardzo

jesli chodzi o api (um/km) to znam w stopniu podstawowym zarowno linuxa jak i windowsa.
kolejna sprawa to potrzebuje jakiejs dokumentacji to bibliotek jakie wybiore.

i zastanawiem sie nad asmem, w prawdzie w c moge teoretycznie zrobic co w asm, ale nie zabardzo mi to wyglada w praktyce.
nie wiem skad brac includy, nie wiem jak dolaczyc kod asm do c, syscalle tez sie roznia, ehh.

funkcje read/write/open/creat/connect - to jest posix, tak?

recv/send/bind - to tez posix?

jakis manual plx!

0

Kup sobie pierwszą lepsza książkę o C, polecam np tą http://helion.pl/ksiazki/cpprim.htm, dowiesz się jak ... wiele nie wiesz? :-)
Następnie poczytaj o założeniach JAVA.

0
c-c-c-c-c napisał(a)

czyli w czym pisac, by program trafil do jak najwiekszej ilosci odbiorcow. programy nie zbyt skomplikowane, glownie narzedzia np do sprawdzania www czy parsowania danych.

do takich założeń asm jest najgorszym z możliwych wyborów

c zresztą też tu szału nie robi, a skoro chcesz robić pod uniksy to może python był by dla ciebie łatwiejszy ?

PS. standardowo na unixach zwykło się do takich rzeczy perl'a używać, ale i tak polecam python ze względu na czystszą składnie

c-c-c-c-c napisał(a)

uwazam ze C, ale teraz jakie biblioteki?
posix - raczej tak
ansi - nie za bardzo

sprawa jest prosta:

  • chcesz pisać tylko pod uniksy = posix
  • chcesz pisać tylko pod windy = winapi
  • chcesz pisać przenośny soft w c = glib

dokumentacje sobie wygoogluj wpisując jedno z powyższych

Jeżeli masz problemy z includami i linkowaniem bibliotek to raczej byś musiał najpierw poczytać jak się kompilatorami GCC obsługiwać.
Albo przejdź na pythona lub inny język gdzie nie musisz ogarniać kompilacji na tak niskim poziomie.

0
bswierczynski napisał(a)

Porady Mozilli na temat pisania przenośnego kodu (C++, ale także C):

https://developer.mozilla.org/en/C___Portability_Guide

Radzę to sobie przefiltrować, bo niektóre wydają się... kontrowersyjne, czy może raczej "lekko przestarzałe". Praktycznie zabraniają tam używania wyjątków, czy STL-a, ale akurat te wytyczne Cię nie dotyczą, jeśli masz zamiar używać tylko C. Ale może znajdziesz tam też jakieś porady przydatne dla Ciebie.

hehe, wymieniles dokladnie moje wytyczne z pracy :D
ogolnei wyjatki nie kompiluja sie wszedzie - sa w uzyciu platformy nie rozwijane od np: 20 lat i nowy kod rownierz na nich musi dzialac, co do stl to sie go nie uzywa bo nie jest threadsafe, boost nie kompiluje sie wszedzie, do tego egzotyczne kompilatory miewaja rozne dziwne bugi...

0

Programowanie bez wyjątków to barbarzyństwo i rąbanie drewna :S

0
0x200x20 napisał(a)

Programowanie bez wyjątków to barbarzyństwo i rąbanie drewna :S

no niestety klienta nie obchodza wyjatki tylko to czy soft zadziala na jego przedpotopowym sprzecie :P

0
cepa napisał(a)
0x200x20 napisał(a)

Programowanie bez wyjątków to barbarzyństwo i rąbanie drewna :S

no niestety klienta nie obchodza wyjatki tylko to czy soft zadziala na jego przedpotopowym sprzecie :P

Dlatego współczuje projektu :P

0

@cepa:
Czyli takie wytyczne nie są jednak objawem totalnej paranoi? ;)

Dołączę jeszcze link do najporządniejszych wytycznych dotyczących stylu programowania w C++, jakie znam:

http://www.jsf.mil/downloads/documents/JSF_AV_C%2B%2B_Coding_Standards_Rev_C.doc (plik doc)

To nie są jakieś tam wytyczne, tylko standard kodowania dla... supernowoczesnego myśliwca F-35 (dokument z 2005 roku). Co ciekawe, oni tam też zabraniają używania wyjątków ze względu na "niewystarczające wsparcie ze strony narzędzi". Sam dokument jest IMHO rewelacyjny i bardzo szczegółowy. W jego opracowaniu uczestniczył sam Bjarne (zresztą linkuje do tego na swojej stronie domowej).

0
bswierczynski napisał(a)

@cepa:
Czyli takie wytyczne nie są jednak objawem totalnej paranoi? ;)

nie to po prostu biznes :D, system moglby byc dla klienta pisany nawet w basicu tak dlugo dopoki spelnia swoje zalozenia ;) z drugiej strony, piszesz konkurencyjny soft i nie powiesz klientowi ze twoj ultra mega nowoczesny kod nie zadziala na jego sprzecie :)

ale fakt, pisanie bez wyjatkow, szablonow, itp itd juz nie jest takie cool :<

0

It's surprising, but many C++ compilers do a very bad job of handling inline member functions. Cfront based compilers (like those on SCO and HP-UX) are prone to give up on all but the most simple inline functions, with the error message "sorry, unimplemented". Often times the source of this problem is an inline with multiple return statements. The fix for this is to resolve the returns into a single point at the end of the function. But there are other constructs which will result in "not implemented". For this reason, you'll see that most of the C++ code in Mozilla does not use inline functions.

A ja sie dziwię, że Firefox jest taki powolny ;)
Z tego wynika, że gdybyśmy chcieli uzyskać przenośność ORAZ wysoką wydajność, Java jest dużo lepszym rozwiązaniem.

0

A wiesz, że nowoczesne kompilatory mają na dobrą sprawę gdzieś to inline, bo przy włączonych optymalizacjach same wiedzą lepiej, co inlajnować? Włączając dodatkowo jakieś optymalizacje działające na wielu plikach obiektowych sprawiamy, że zrobienie czegoś inline zupełnie nie ma znaczenia, kompilator zrobi to za nas i w dodatku wszystko możemy trzymać w .cpp, bez kodu w nagłówkach.

0

No, gcc ma to od dosyć niedawna. Ale nic nie zastąpi pewnych optymalizacji, które można osiągnąć stosując wzorce, a których tu też zabraniają. I tego już żaden zarąbisty kompilator sam nie naprawi.

0

Tak naprawdę żaden kompilator nie trzyma się żadnego standardu. To nie przeglądarki WWW, gdzie nastała jakaś moda na testy sprawdzające zgodność w 200% ze "standardami".
Trzymać się należy kompilatora, którego się używa, a nie "standardu". Standardy są dla piszących kompilatory, aby były w miarę ze sobą zgodne (a i tak przecież nie są).

0
Azarien napisał(a)

Tak naprawdę żaden kompilator nie trzyma się żadnego standardu.

Standardu C? Dawno w C nie pisałem, ze są kompilatory zgodne np. z ANSI C idealnie, nie chce mi się teraz tej rozpiski szukać.

0

@Azarien:
Hola hola! Z tym porównaniem do przeglądarek proszę się nie zapędzać :D. Kompilatory C są dużo bardziej zgodne co do przetwarzanego przez nie kodu C niż silniki renderujące przeglądarek co do kodu CSS. Dlatego właśnie (na szczęście!) nastaje powoli "moda" na ściganie się, który silnik renderujący będzie bardziej zgodny ze standardami. Bo sytuacja póki co jest dość beznadziejna. Szczególnie jeśli uwzględnia się Internet Explorera 6, a nawet 7. Wyobraź sobie, że w C połowa słów kluczowych w ogóle Ci nie działa. A część pozostałych działa nieprawidłowo.

A jeśli chodzi o ANSI C to też mi się wydaje, że kompilatory są całkiem nieźle zgodne.

Porównanie to wydaje mi się więc nie na miejscu (chyba że znasz się lepiej ode mnie na kompilatorach C i wiesz, że są pomiędzy nimi gigantyczne różnice; ja w C pisałem ostatni raz na bodaj drugim czy trzecim roku studiów).

0

kompilatory C sa bardzo zgodne (ansi/posix) w przeciwienstwie do C++ i dlatego jest to standard przemyslowy, tzn: jest duza firma majaca podpisana umowe np: z ibm czy hp na support masy sprzetu i taki klient chce abys mu napisal jakis soft, C jest o tyle dobrym wyborem ze masz pewnosc ze ten soft zadziala a przynajmniej sie skompiluje dlatego ze nie ktore platformy nie sa rozwijane od 20 lat :P

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