我试图编写一个简单的 C 程序。这里我定义了一个宏。

#define NAME(x) #x ## _bingo

现在将首先解决其中的哪一个( ### )?

我被困住了:)。我试图用谷歌搜索这种宏优先级。但是找不到任何相关的东西。

最佳答案


标准说:

但是你想在这里实现什么?看起来:

#define NAME(x) x ## _bingo
如果您想连接 x token 和 _bingo 就足够了。
例子:
NAME(foo)
将扩展为
foo_bingo
编辑:
如果要使用 NAME 宏对生成的 token 进行字符串化,这里有一个示例,说明如何执行此操作(解决宏替换问题 -> 标准的 16.3.1):
#define NAME(x)  x##_bingo

// Converts the parameter x to a string after macro replacement
// on x has been performed if needed.
#define STRINGIFY(x)    DO_STRINGIFY(x)
#define DO_STRINGIFY(x) #x

int main() {
    std::string n  = STRINGIFY( NAME( foo ) );
    std::string n2 = DO_STRINGIFY( NAME(foo) );

    // Will print foo_bingo as expected
    std::cout << n << std::endl;

    // Will print NAME( foo ) because the macro NAME is not expanded
    std::cout << n2 << std::endl;
    return 0;
}
输出:
foo_bingo
NAME(foo)

关于c - 无法解析 C 中的宏优先级?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18759947/

10-11 23:08
查看更多