gcc - 函数的条件宏 #define - 导致 : "function" redefined warning

标签 gcc macros c-preprocessor

我刚刚看到这个帖子,描述了如何添加条件宏: Conditional value for a #define

但就我而言,我在条件内定义一个函数。

#if TARGET_IPHONE_SIMULATOR

#define doSomething(){\
    \\ does something
}\

#else

#define doSomething(){\
    \\ does something else
}\

#endif

这确实有效,除了我导致 gcc 编译器抛出此警告:

"doSomething" redefined
This is the location of the previous arguments

是否有任何解决方法可以帮助消除警告?

更新:

所以我尝试将条件包含在我的定义中:

#define doSomething(){\

#if TARGET_IPHONE_SIMULATOR
    \\ do something
#else 
    \\ do something else
#endif

}\

但这会引发错误:

error: '#' is not followed by a macro parameter.

最佳答案

我找到了问题的答案 here .

结论:不能在#define中包含#ifdef等...,因为每行只能有一个预处理指令。

因此,虽然我们可以用反斜杠“\”来换行,但这有助于编写可读的多行宏, 但预处理器会将其视为一行:

#define doSomething(){ #if TARGET_IPHONE_SIMULATOR ... #endif }

这会引发此错误:

error: '#' is not followed by a macro parameter.

这是有道理的,所以我将不得不重新考虑我的实现。

关于gcc - 函数的条件宏 #define - 导致 : "function" redefined warning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869440/

相关文章:

c - 如何使用 TDM64-GCC 工具链执行标准 GCC "configure"脚本?

gcc - cygwin 中 gcc 的正确包名是什么?

C++设置浮点异常环境

c - 根据宏定义,这个输出是什么

windows - 如何使用标准输入管道作为 gcc 的源输入?

c - 如果有许多具有相同参数的函数,是否应该使用宏来避免多次输入参数?

macros - 为什么 Elixir Logger 由宏组成?

c - 来自供应商的预处理指令使用括号而不是引号定义

c++ - “卡住”一个表达式

c - 如何设置gcc -E深度(预处理级别)?