1

我必须使用 Clang 在 Mac 上编译一个 API,该 API 使用类似于此的构造:

#define TRUE 1

void func(int a) {
    // ...
}

void func(double a) {
    // ...
}

void func(float a) {
    // ...
}

func(TRUE);

Clang 抱怨说对的调用func()是模棱两可的,而 MSVC 和 GCC 没有。在这种情况下,Clang 是否可以选择整数变体?

编辑:这是编译的原始输出

../../resource/_api/c4d_basedocument.cpp:263:52: error: conversion from 'int' to 'const GeData' is ambiguous
        this->SetParameter(DescLevel(DOCUMENT_USERCHANGE),TRUE,DESCFLAGS_SET_DONTCHECKMINMAX);
                                                          ^~~~
../../resource/_api/ge_sys_math.h:21:15: note: expanded from macro 'TRUE'
        #define TRUE    1
                        ^
../../resource/_api/c4d_gedata.h:97:3: note: candidate constructor
                GeData(double n)
                ^
../../resource/_api/c4d_gedata.h:110:3: note: candidate constructor
                GeData(LONG n)
                ^
../../resource/_api/c4d_gedata.h:116:3: note: candidate constructor
                GeData(SReal n)
                ^

LONG是整数类型,SReal浮点类型。

4

1 回答 1

0

我有时间调查更多时间来查看原始构建项目,并发现我缺少编译器选项。有趣的是,它只会产生额外的定义集,这似乎解决了“歧义”。

-include _api/ge_mac_flags.h

看起来像

#ifndef __GE_MAC_FLAGS__
#define __GE_MAC_FLAGS__

#define __MAC
#define __DEBUGGING__                                                                               // avoid conflicts with DebugAssert() definition for the Mac

#if __LP64__
    #define __C4D_64BIT
#endif

#endif

解决它!

于 2013-07-14T12:35:40.827 回答