#IFDEF или " код для линукс и виндоус (в народе - "виндовс") одновременно"

В этой теме соберу материалы которые помогут понять "с чего начать на практике по Операционным системам" .

Итак, пишем на си , сразу для двух осей.
----------------------
сначала просто вспомним что такое =

1) препроцессор си = http://ru.wikipedia.org/wiki/%D0%9F%D1%8...

2) директивы препроцессора си (читать обязательно) = http://pers.narod.ru/study/cpp/10.html

Лексема = http://ru.wikipedia.org/wiki/%D0%9B%D0%B...

vedro-compota's picture

общие инструкции к выполнению задания на потоки =

С помощью функции CreateThread создать нить и выполнить в ней ряд действий. В программе должны быть предусмотрена возможность приостановить, возобновить и прекратить выпоняемые действия. Нить должна передавать главному процессу свой статус, к примеру, текущие действия или процент выполнения (статус можно передавать, например, изменением приватных полей формы и использовать значения этих полей используется для отображения по таймеру). Выход из нити осуществлять с помощью функции ExitThread. При решении задачи желательно использование WinAPI-функций. (читать = http://ru.wikipedia.org/wiki/Windows_API)

в связи с этим полезным может оказаться =
1) WinAPI по-русски = http://develab.narod.ru/api/
---------------------------------------------
Для выполнения первой задачи по операционным системам требуется не только определить операционную систему , но ещё и использовать Win API , но так как эта тема посвящается определению операционной системы, то Win API мы рассмотрим в отдельном разделе .

Итак, сконцентрируемся на определении операционной системы.
вот неплохой пример =

// this version is for both Windows and UNIX, the following line
/* */
// specifies that this is for WINDOWS
#ifndef WINDOWS_XP  /* если эта константа не включена*/
        #define WINDOWS_XP /* включаем её = определение вида
#define some
При этом все экземпляры идентификатора some будут удалены из текста программы. 
Сам идентификатор some считается определенным и дает значение 1 при проверке директивой #if.*/
#endif
 
// #include <XPCException.h>  // add this later
 
#ifdef UNIX  /* если константа определена то подключаем следующие заголовочные файлы*/
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
#else
    #include <winsock2.h>
#endif

или более по теме (работоспособность ещё надо проверить) :

#if defined(linux) || defined(__linux)
        printf("this is linux!\n");
#endif
#if defined(_WIN32) || defined (_WIN64) /*первый для обеих определён*/
        printf("this is windows!\n");
#endif

Читать источник = http://www.cyberforum.ru/cpp-beginners/t...
почитать по-буржуйски =http://gcc.gnu.org/onlinedocs/cpp/Condit...

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

"Точкой входа" для консольной программы для виндоус вроде как является вся та же main() - функция, поэтому будет справедлив такой вот код определяющий операционную систему =

#include <stdio.h>
#include <stdlib.h>
#if defined(_WIN32) || defined (_WIN64) 
	#include <windows.h>
	#define WINDOWSS 1
#endif



 #ifdef WINDOWSS
	int main()
	 {
		 char* mtext = " hi Billy !! )) WE'RE IN WINDOWS NOW !))\n build as win32 CONSOLE program \n" ;
		  printf("\n%s",mtext );
		 return TRUE;
	 }
#else
	int main()
	 {
		 char* mtext = " Glory to the great hacker, Linus Torvalds! we're not in Windows!\n" ;
		  printf("\n%s",mtext );
	        return TRUE;
	}
#endif

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

если же вы в Pelles С желаете наряду с консольным проектом использовать
всевозможные окна, то , например, для текстового сообщения надо написать что-то вроде =

#include stdio.h>
#include stdlib.h>
#if defined(_WIN32) || defined (_WIN64) 
	#include windows.h>
	#define WINDOWSS 1
        #pragma comment(lib, "user32.lib")
#endif
#define WIN32_DEFAULT_LIBS



 #ifdef WINDOWSS
	int main()
	 {
		 char* mtext = " hi Billy !! )) WE'RE IN WINDOWS NOW !))\n build as win32 CONSOLE program \n" ;
		  printf("\n%s",mtext );
	    MessageBox(NULL," build as win32 CONSOLE program with message box !","Test",MB_OK);
	 
	
	return TRUE;
	   
	 }
#else
	int main()
	 {
		 char* mtext = " Glory to the great hacker, Linus Torvalds! we're not in Windows!\n" ;
		  printf("\n%s",mtext );
	        return TRUE;
	}
#endif

читать подробнее о директиве = http://netcode.ru/cpp/?lang=&katID=6&ska...

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

код одновременно для видноус и линукс #ifdef
код для линукс и виндовс одновременно в одном файле
узнать какая операционная система система язык си
определить операционную систему.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

в принципе можно использовать и одну функцию main() а определение операционной системы производить внутри её)

_____________
матфак вгу и остальная классика =)