gpt4 book ai didi

c++ - 使用宏访问指向数据成员的指针会产生 "error: expected unqualified-id before ‘*’ token ”

转载 作者:太空狗 更新时间:2023-10-29 22:58:11 24 4
gpt4 key购买 nike

大问题的最少代码:

struct S { int i; };
typedef int (S::*Type);

Type foo (int) { return &S::i; }
#define FOO(X) *foo(X)

int main ()
{
S s;
s.*foo(0) = 0; // ok
s.FOO(0) = 0; // error <--- ??
}

如果 foo() 方法被替换为 FOO() 宏以避免“*”,那么它会导致标题中出现错误。当我使用 g++ -E 选项检查预处理时,“ok”和“error”行看起来都一样。
为什么宏会出现这个错误?

最佳答案

使用 clang 3.8 我得到了您程序的下一个输出:

# 1 "test.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 325 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "test.cpp" 2
struct S { int i; };
typedef int (S::*Type);

Type foo (int) { return &S::i; }


int main ()
{
S s;
s.*foo(0) = 0;
s. *foo(0) = 0;
}

可以看到行中的空格:

s. *foo(0) = 0;

这个空格是“expected the unqualified-id before...”错误的原因。空间本身应该是 token spacing 的产物.

不知道为什么g++ 不显示空格。可能是关于表示预处理输出的编译器错误。

关于c++ - 使用宏访问指向数据成员的指针会产生 "error: expected unqualified-id before ‘*’ token ”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41396349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com