[C] Wykrywanie systemu
Ostatnio zmodyfikowano 2015-06-19 17:39
Roofy5 Temat założony przez niniejszego użytkownika |
[C] Wykrywanie systemu » 2015-06-19 13:08:13 Chciałem napisać program, tworzący listę. Aby tą listę wyświetlić i żeby program ładnie prezentował się w konsoli używam niektórych funkcji obsługujących konsolę np. system("CLS"), _sleep(). Nie jestem pewien czy podane funkcje zadziałają pod Linuxem (program tworzę na Windows, ale chciałbym żeby działał także pod Linuxem). Wpadłem na pomysł żeby stworzyć coś w rodzaju strażnika na początku programu - chodzi mi o polecenia pre-procesora, które ustalą w jakim systemie program jest uruchomiony. Myślałem o czymś takim: #ifdef LINUX #define SYSTEM LINUX
#ifdef WINDOWS #define SYSTEM WINDOWS
#endif
Do każdej funkcji dodałbym pole z enum i określał wartość SYSTEM - wtedy dostosowywałby działanie funkcji. Nie wiem czy kod napisałem poprawnie, nie wiem także jak odczytać wersję systemu. Pomożecie? :D |
|
pekfos |
» 2015-06-19 13:34:05 Nie prościej użyć ncurses? |
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-06-19 14:03:08 Mam już taki kod, który poprawnie wykrywa dany system - testowałem pod Win i pod Ubuntu: #ifdef __linux__ #define SYSTEM 0
#elif linux #define SYSTEM 0
#elif __linux #define SYSTEM 0
#elif _WIN32 #define SYSTEM 1
#elif _WIN64 #define SYSTEM 1
#endif
Mam jednak problem z samym programem. W Visualu napisałem strutkurę w ten sposób: struct node { int klucz; node * next; };
Niestety pod Linuxem wywala masę błędów, włącznie z tym że nie rozumie linijki node *next; Pod Viusalem kompiluję to w C++ a pod linuxem w C Może mi ktoś wytłumaczyć jak powinienem to zapisać tak aby w gcc kompilował porapwnie? Czytałem trochę o taki sposobie: typedef struct node { int klucz; node * next; } node;
Czym to właściwie się różni?? Tak samo czy w C istnieje taki zapis?? void inicjuj( int key, node *& root );
Chodzi mi o zapis *& - gcc wywala na tym błąd. |
|
Lora |
» 2015-06-19 14:19:29 W C się deklaruje zmienną struktury w taki sposób: struct struktura { };
int main() { struct struktura obiekt; }
Możesz użyc typedef , żeby to skrócić: struct struktura { };
typedef struct struktura struktura;
int main() { struktura obiekt; }
To co zrobiłeś to jest to samo tylko używasz typedefa od razu przy definicji struktury: typedef struct node { int klucz; struct node * next; } node;
Co do 2 pytania - w C nie ma referencji. |
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-06-19 14:51:21 "W C nie ma referencji" Hm.. nie wiedziałem o tym xD Dzięki za informację - strukturę już poprawiłem, tylko teraz mam inny problem. Skoro C nie obsługuje referencji, to jak mam zmienić mój kod: void inicjuj( int key, node *& root ) { if( root == NULL ) { root =( node * ) malloc( sizeof( node ) ); root->klucz = key; root->next = NULL; return; } else { printf( "\nLista jest juz stworzona!\n" ); spij(); return; } }
|
|
Lora |
» 2015-06-19 15:08:31 Możesz przekazywać do funkcji wskaźnik do twojego roota, czyli wskaźnik do wskaźnika: void inicjuj( int key, node ** root ) { if(( * root ) == NULL ) { ( * root ) =( node * ) malloc( sizeof( node ) ); ( * root )->klucz = key; ( * root )->next = NULL; return; } else { printf( "\nLista jest juz stworzona!\n" ); spij(); return; } }
int main() { node * root = NULL; inicjuj( 1, & root ); }
|
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-06-19 15:35:49 Dzięki wielkie :D Też myślałem o tym żeby zrobić to przez wskaźnik na wskaźnik ale zapomniałem o tych nawiasach ( * root )->klucz = key; Pisałem bez nawiasów i miałem błąd tzn. * root->klucz = key; Tak właściwie to czym to się różni - tam jest jakiś priorytet między * a = ?? |
|
Lora |
» 2015-06-19 15:42:17 -> ma priorytet nad * . Czyli zapis * root->klucz jest równoznaczny z *( root->klucz ) . |
|
« 1 » 2 |