• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Colector Boy

Como é que sei se estou a correr uma aplicação no Windows,Linux, Mac ,etc?

8 mensagens neste tópico

Alguém me pode dizer como é que sei se estou a correr uma aplicação no Windows,Linux, Mac ,etc?

O que eu queria fazer/saber era como é que eu faço para um bocado de codigo so correr se estiver nesse Sistema Operativo?

Não sei se para Windows temos que usar _WINDOWS_H ou _WIN32 e também não sei se para os restantes está certo.

E se temos que ser nós a definir essas variáveis/valores ou não.

Eu fiz isto mas não sei se está certo:

#ifdef _WIN32  //_WINDOWS_H  nao sei se devo usar _WIN32  ou _WINDOWS_H
                   //o nosso SO é Windows?
        

        printf("Windows \n");


    #else
        #ifdef _LINUX_H  //o nosso SO é Linux?
            printf("Linux \n");

        #else

            #ifdef _MAC_H  //o nosso SO é Mac?
                printf("Mac \n");
            #else //o nosso SO não é nenhum dos anteriores?
                printf("Erro \n");
            #endif
        #endif
    #endif

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui fica um pequeno excerto de um projecto meu:

#if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(WIN64)
#define VAPOR_PLATFORM_WINDOWS
#elif defined(__APPLE__) || defined(MACOSX)
#define VAPOR_PLATFORM_MACOSX
#elif
#define VAPOR_PLATFORM_LINUX
#else
#error "Unknown platform (not currently supported by the engine)"
#endif

Já agora, quando meteres código no fórum utiliza a respectiva opção. Quando estás a escrever um post tens uma coisa que diz "Insert Code" ou "Inserir Código". Assim fica o código todo bonitinho. Editei o teu post anterior para adicionar isso. :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Brigado.

Desculpa.

Mas essas variáveis não são declaradas por mim pois não?

Como é que o Sistema sabe se é Windows ou outra coisa qualquer?

Onde tem ele essa informação?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi bem a tua questão.

Aquilo são instruções para o pré-processador do C.

Basta meteres aquele código num ficheiro .h, e depois fazeres em qualquer lado:

#ifdef VAPOR_PLATFORM_WINDOWS
    // Windows
#elif VAPOR_PLATFORM_MACOSX
    // MacOSX
#elif VAPOR_PLATFORM_LINUX
    // Linux
#endif

A detecção da plataforma Linux talvez possa ser mais robusta, mas como só estou a pensar nestas 3 plataformas no meu projecto, não pesquisei por definições específicas do Linux.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No Windows.h tens algo do género:


#ifndef _WINDOWS_H 
#define _WINDOWS_H .

O que eu quero fazer é:

#ifdef _WINDOWS_H 
//faz bloco

A minha dúvida é só se preciso de fazer isto ou não:

#define _WIN32  ou #define _WINDOWS_H  
#define   _LINUX_H
#define    _MAC_H     

:hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#ifndef _WINDOWS_H
#define _WINDOWS_H

Isto é uma notação que se usa, simplesmente para previnir que um .h seja incluído várias vezes.

Já agora, no bocado de código lá em cima, fizeste uma coisa que pode ser melhorada.

Em vez disto:

#ifdef WINDOWS
    //block
#else
    #ifdef LINUX
        //block
    #endif
#endif

Podes fazer:

#if defined(WINDOWS)
    //block
#elif defined(LINUX)
    //block
#endif

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas não respondeste a minha pergunta.

#if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(WIN64)

        #define VAPOR_PLATFORM_WINDOWS

#elif defined(__APPLE__) || defined(MACOSX)

        #define VAPOR_PLATFORM_MACOSX

#elif

        #define VAPOR_PLATFORM_LINUX

#else

        #error "Unknown platform (not currently supported by the engine)"

#endif

Como é que o compilador sabe se está em Windows,Linux, Mac ou outro SO?

Porque declaraste essas variáveis/valores num ficheiro .h.

Eu sei que os define têm de ser feitos num header (ficheiro .h) mas qual o pensamento para saber se é Windows, Linux, Mac ou outra coisa parecida?

Eu sei que tenho que declarar _WINDOWS_H,_LINUX_H e _MAC_H mas não faz sentido declarar todos ao mesmo tempo, ou seja, não faz sentido fazer:

#define _WINDOWS_H
#define _LINUX_H 
#define  _MAC_H 

Pois não podemos ter 3 SO a correr o compilador.

E não fazia sentido pois entrava no 1º if.

Faz sentido declarar as variáveis/valores só não sei como nem onde.

Podias dar um exemplo de uma header com as respectivas declarações?

Só para ter uma ideia como tu fazes para

:hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já te mostrei a solução.

Lê como funciona compilação condicional com o pré-processador, é isso que te está a falhar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora