es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo deshacerse de las advertencias de que las definiciones del precompilador no están definidas.

Hay un archivo que descargué del sitio web de Unity.

pragma once

// Incluye las bases estándar, define la plataforma actual, etc.

include <stddef.h>

// ¿En qué plataforma estamos?
// UNITY_WIN – Windows (regular win32)
// UNITY_OSX – Mac OS X
// UNITY_LINUX – Linux
// UNITY_IOS – iOS
// UNITY_TVOS – tvOS
// UNITY_ANDROID – Android
// UNITY_METRO – WSA o UWP
// UNITY_WEBGL – WebGL

if MSC_VER

#define UNITY_WIN 1

elif defined(APPLE)

#if TARGET_OS_TV // ‘TARGET_OS_TV’ no está definido, se evalúa a 0
#define UNITY_TVOS 1
#elif TARGET_OS_IOS // ‘TARGET_OS_IOS’ no está definido, se evalúa a 0
#define UNITY_IOS 1
#else
#define UNITY_OSX 1 // Macro ‘UNITY_OSX’ redefinida
#endif

elif defined(ANDROID)

#define UNITY_ANDROID 1

elif defined(UNITY_METRO) || defined(UNITY_LINUX) || defined(UNITY_WEBGL)

// Estos están definidos externamente

elif defined(EMSCRIPTEN)

// Esto ya está definido en Unity 5.6
#define UNITY_WEBGL 1

else

#error “¡Plataforma desconocida!”

endif

El problema es que cuando intento incluir el archivo en mi proyecto de XCode, obtengo una advertencia (ponlas en comentarios)

#if TARGET_OS_TV // ‘TARGET_OS_TV’ no está definido, se evalúa a 0
#define UNITY_TVOS 1
#elif TARGET_OS_IOS // ‘TARGET_OS_IOS’ no está definido, se evalúa a 0
#define UNITY_IOS 1
#else
#define UNITY_OSX 1 // Macro ‘UNITY_OSX’ redefinida
#endif

Intenté usar #pragma warning(suppress: 4101) y algunos enfoques similares, pero no ayuda.

UPD

...

#ifdef TARGET_OS_TV
    #define UNITY_TVOS 1
#elif TARGET_OS_IOS // 'TARGET_OS_IOS' no está definido, se evalúa a 0
    #define UNITY_IOS 1
#else
    #define UNITY_OSX 1
#endif

...

Usar “ifdef” ayuda a deshacerse de la primera advertencia, pero la segunda aún persiste.

UPD2

#ifdef TARGET_OS_TV
#define UNITY_TVOS 1
#elifdef TARGET_OS_IOS // Directiva de preprocesamiento no válida
#define UNITY_IOS 1
#else
#define UNITY_OSX 1
#endif

Tags:  ,

Answer

  1. Avatar for davy.ai

    Las advertencias se deben a que TARGET_OS_TV y TARGET_OS_IOS no están definidos en Xcode, pero el código está comprobando su existencia mediante #if. Para solucionar este problema, reemplace #if por #ifdef en las comprobaciones de TARGET_OS_TV y TARGET_OS_IOS. El código actualizado se verá así:

    ...
    #ifdef TARGET_OS_TV
        #define UNITY_TVOS 1
    #elif defined(TARGET_OS_IOS)
        #define UNITY_IOS 1
    #else
        #define UNITY_OSX 1
    #endif
    ...
    

    Esto resolverá la primera advertencia. Sin embargo, la segunda advertencia sobre la redefinición de UNITY_OSX no se puede solucionar, ya que este es el comportamiento previsto del código.

Comments are closed.