Fragment kodu zależny od platformy a preprocesor

0

Cześć!

Kod, który piszę, jest pisany tak, by kompilował się i działał zarówno pod Windows, jak i pod Linuksem. I - wydaje mi się - że, z wyjątkiem jednego szczegółu, problemów nie powinno być. Jest jedna jedyna rozbieżnosć między platformami i dotyczy jednego miejsca w programie, w którym używam funkcji, za pomocą której usypiam wątek na kilkanaście milisekund. Pod Windowsem używam Sleep(), pod Linuksem będzie to select().

Pierwszym rozwiązaniem jest (skoro muszę - a muszę - mieć dwa makefile), stworzyć pliki sleep_lin.cpp i sleep_win.cpp, zawierającej implementację własnej funkcji spij(), która zależnie od platformy wywoła właściwego usypiacza. Później tylko wystarczy jedna podmiana w makefile i gotowe.

Szukam jednak jakiegoś ładniejszego rozwiązania. Czy nie dałoby się tego zrobić jakoś przy użyciu preprocesora?
Przykładowo:

#if SOURCE_SYSTEM=WINDOWS
//kod dla windowsa
#elsif SOURCE_SYSTEM=UNIX
//kod dla linuksa
#endif

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

0

Słowa klucze, których potrzebujesz to: "kompilacja warunkowa", "predefiniowane makra" lub "cross platform application c++" itd. Zajrzyj do dokumentacji kompilatora, z którego korzystasz tam jest wszystko opisane.

edit:
sprawdź to

0

Sposób, który sugerujesz (jeśli dobrze Cię zrozumiałem) znałem już. Problem w tym, że wymaga on, żebym przed kompilacją modyfikował określony plik nagłówkowy i definiował w nim albo #define OS_WINDOWS albo #define OS_LINUX. Moje pytanie bardziej dotyczy tego, czy preprocesor czasami nie jest świadom, na jakim OSie działa, i czy tę informację można wyciągnąć na zewnątrz.

0

na każdym systemie, pod każdym kompilatorem, JAKIEŚ makra są zdefiniowane. tylko się dowiedz jakie.
tak na ślepo możesz sprawdzić #ifdef LINUX, #ifdef WIN32, ale rzeczywiste nazwy mogą być trochę inne.

0

Może jeszcze puścić programik który po strukturze katalogów stwierdzi windows czy linux :) zawsze też jakies rozwiązanie np jeżeli jest /home to linux itp może i zły pomysł :)

0

@Gelldur - a kalkulator pewnie napiszesz za pomocą sztucznej inteligencji? :P

pierwszy wynik googla dla "C++ predefined macros": http://msdn.microsoft.com/en-us/library/b0084kay%28VS.80%29.aspx - wszystko o zdefiniowanych makrach w VSC++

nieco więcej szukałem, ale znacznie lepszy dla autora tekst bo o makrach we wszystkich systemach: http://predef.sourceforge.net/preos.html

0
Gelldur napisał(a)

Może jeszcze puścić programik który po strukturze katalogów stwierdzi windows czy linux :) zawsze też jakies rozwiązanie np jeżeli jest /home to linux itp może i zły pomysł :)

Bardzo zły pomysł, bo raz że jest niepewny (kto ci broni utworzyć katalog home w Windows albo WINDOWS w Linuksie?) a dwa że istnieje też coś takiego jak cross-compiling...

0
MSM napisał(a)

nieco więcej szukałem, ale znacznie lepszy dla autora tekst bo o makrach we wszystkich systemach: http://predef.sourceforge.net/preos.html

Tego szukałem. Wielkie dzięki!

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