使用不同类型("signed char"和"bool")重新定义Typedef [英] Typedef redefinition with different types ('signed char' vs 'bool')

查看:70
本文介绍了使用不同类型("signed char"和"bool")重新定义Typedef的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

升级我的代码以支持ARM64时,我收到了错误消息

When upgrading my code to support ARM64, I received the error

'Typedef redefinition with different types ('signed char' vs 'bool')'

它所引用的代码是;

#ifndef _WINDEF_
    // if these aren't defined already by Windows headers, define now

    typedef signed char BOOL;

    #define FALSE   0
    #define TRUE    1

#endif 

努力查看如何解决此问题?

Struggling to see how I can resolve this?

我正在使用SoundTouch,文件为STTypes.h

I am using SoundTouch, the file is STTypes.h

这是该文件中的完整代码;

Here is full code from that file;

#ifndef STTypes_H
#define STTypes_H

typedef unsigned int    uint;
typedef unsigned long   ulong;


#ifdef __GNUC__
    // In GCC, include soundtouch_config.h made by config scritps
    #include "soundtouch_config.h"
#endif

#ifndef _WINDEF_
    // if these aren't defined already by Windows headers, define now

    typedef signed char BOOL;

    #define FALSE   0
    #define TRUE    1

#endif  // _WINDEF_


namespace soundtouch
{

/// Activate these undef's to overrule the possible sampletype 
/// setting inherited from some other header file:
//#undef SOUNDTOUCH_INTEGER_SAMPLES
//#undef SOUNDTOUCH_FLOAT_SAMPLES

#if !(SOUNDTOUCH_INTEGER_SAMPLES || SOUNDTOUCH_FLOAT_SAMPLES)

    /// Choose either 32bit floating point or 16bit integer sampletype
    /// by choosing one of the following defines, unless this selection 
    /// has already been done in some other file.
    ////
    /// Notes:
    /// - In Windows environment, choose the sample format with the
    ///   following defines.
    /// - In GNU environment, the floating point samples are used by 
    ///   default, but integer samples can be chosen by giving the 
    ///   following switch to the configure script:
    ///       ./configure --enable-integer-samples
    ///   However, if you still prefer to select the sample format here 
    ///   also in GNU environment, then please #undef the INTEGER_SAMPLE
    ///   and FLOAT_SAMPLE defines first as in comments above.
    #define SOUNDTOUCH_INTEGER_SAMPLES     1    //< 16bit integer samples
    //#define SOUNDTOUCH_FLOAT_SAMPLES       1    //< 32bit float samples

 #endif

    #if (WIN32 || __i386__ || __x86_64__)
        /// Define this to allow X86-specific assembler/intrinsic optimizations. 
        /// Notice that library contains also usual C++ versions of each of these
        /// these routines, so if you're having difficulties getting the optimized 
        /// routines compiled for whatever reason, you may disable these optimizations 
        /// to make the library compile.

        #define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS     1

    #endif

    // If defined, allows the SIMD-optimized routines to take minor shortcuts 
    // for improved performance. Undefine to require faithfully similar SIMD 
    // calculations as in normal C implementation.
    #define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION    1


    #ifdef SOUNDTOUCH_INTEGER_SAMPLES
        // 16bit integer sample type
        typedef short SAMPLETYPE;
        // data type for sample accumulation: Use 32bit integer to prevent overflows
        typedef long  LONG_SAMPLETYPE;

        #ifdef SOUNDTOUCH_FLOAT_SAMPLES
            // check that only one sample type is defined
            #error "conflicting sample types defined"
        #endif // SOUNDTOUCH_FLOAT_SAMPLES

        #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
            // Allow MMX optimizations
            #define SOUNDTOUCH_ALLOW_MMX   1
        #endif

    #else

        // floating point samples
        typedef float  SAMPLETYPE;
        // data type for sample accumulation: Use double to utilize full precision.
        typedef double LONG_SAMPLETYPE;

        #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS
            // Allow SSE optimizations
            #define SOUNDTOUCH_ALLOW_SSE       1
        #endif

    #endif  // SOUNDTOUCH_INTEGER_SAMPLES
};


// When this #define is active, eliminates a clicking sound when the "rate" or "pitch" 
// parameter setting crosses from value <1 to >=1 or vice versa during processing. 
// Default is off as such crossover is untypical case and involves a slight sound 
// quality compromise.
//#define SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER   1

#endif

///好吧,对于有类似问题的任何人,我现在都有答案;

/// OK I now have the answer, for anyone who has a similar issue use;

#ifndef _WINDEF_
    // if these aren't defined already by Windows headers, define now

#if defined(__APPLE__)
#if !defined(OBJC_HIDE_64) && TARGET_OS_IPHONE && __LP64__
typedef bool BOOL;
#else
typedef signed char BOOL;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
#endif
#else
   typedef int BOOL;
#endif 

    #define FALSE   0
    #define TRUE    1

#endif  // _WINDEF_

我必须将此归功于Github上的rspeyer,以便发布新修复程序

I must credit this to rspeyer on Github for posting the new fix

https://github.com/talko/soundtouch/blob/9e06779ad056ad341dd369d4809ef20de95e4844/include/STTypes.h

推荐答案

现在已添加答案,由于在Github上使用了rspeyer而进行了修复

Answer now added, fixes thanks to rspeyer on Github

https://github.com/talko/soundtouch/blob/9e06779ad056ad341dd369d4809ef20de95e4844/include/STTypes.h

这篇关于使用不同类型("signed char"和"bool")重新定义Typedef的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆