Home > front end >  How to get rid of warnings that precompiler definitions are not definied
How to get rid of warnings that precompiler definitions are not definied

Time:01-08

There is a file that I downloaded from the Unity web-site

#pragma once

// Standard base includes, defines that indicate our current platform, etc.

#include <stddef.h>


// Which platform we are on?
// 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 or UWP
// UNITY_WEBGL - WebGL

#if _MSC_VER
    #define UNITY_WIN 1
#elif defined(__APPLE__)
    #if TARGET_OS_TV //'TARGET_OS_TV' is not defined, evaluates to 0
        #define UNITY_TVOS 1
    #elif TARGET_OS_IOS //'TARGET_OS_IOS' is not defined, evaluates to 0
        #define UNITY_IOS 1
    #else
        #define UNITY_OSX 1 //'UNITY_OSX' macro redefined
    #endif
#elif defined(__ANDROID__)
    #define UNITY_ANDROID 1
#elif defined(UNITY_METRO) || defined(UNITY_LINUX) || defined(UNITY_WEBGL)
    // these are defined externally
#elif defined(__EMSCRIPTEN__)
    // this is already defined in Unity 5.6
    #define UNITY_WEBGL 1
#else
    #error "Unknown platform!"
#endif

...

The problem is that when I try to include the file in my XCode project I got a warning (put them in comments)

...
    #if TARGET_OS_TV //'TARGET_OS_TV' is not defined, evaluates to 0
        #define UNITY_TVOS 1
    #elif TARGET_OS_IOS //'TARGET_OS_IOS' is not defined, evaluates to 0
        #define UNITY_IOS 1
    #else
        #define UNITY_OSX 1 //'UNITY_OSX' macro redefined
    #endif
...

I tried to use #pragma warning(suppress: 4101) and a few similar approaches, but it doesn't help

UPD

...
#ifdef TARGET_OS_TV
        #define UNITY_TVOS 1
    #elif TARGET_OS_IOS //'TARGET_OS_IOS' is not defined, evaluates to 0
        #define UNITY_IOS 1
    #else
        #define UNITY_OSX 1 
    #endif
...

Using ifdef helps to get rid of the first warning, but the second one is still in place

UPD2

...
    #ifdef TARGET_OS_TV
        #define UNITY_TVOS 1
    #elifdef TARGET_OS_IOS //Invalid preprocessing directive
        #define UNITY_IOS 1
    #else
        #define UNITY_OSX 1
    #endif
...

CodePudding user response:

You should not use #if to test an undefined macro. The warning implies that you should use #ifdef instead.

You may not define a previously defined macro. You could first undefined the old definition, but that's rarely a good idea.

Using ifdef helps to get rid of the first warning, but the second one is still in place

In c 23 you will be able to use #elifdef instead.

Otherwise, you can use #elif defined(the_macro).

  •  Tags:  
  • Related