gpt4 book ai didi

c++变量没有在宏中命名类型

转载 作者:太空狗 更新时间:2023-10-29 23:35:41 26 4
gpt4 key购买 nike

有这个代码:

#include <iostream>

int a=0;

#define F(f) \
int t##f(int, int);\
a ++;\
int t##f(int i, int j)

F(nn) {
return i*j;
}

int main() {
int b = tnn(3, 8);
std::cout << a << b;
}

编译时出现错误:

7:3: error: 'a' does not name a type
10:1: note: in expansion of macro 'F'

为什么 a 在宏展开的位置不可见?

最佳答案

看看宏的展开:

F(nn) 变成

int tnn(int, int);
a++;
int tnn(int i, int j) {
return i * j;
}

变量“a”正在外部函数中递增,这是一个语法错误。

就像另一个答案所说的那样,您不能随心所欲地执行语句;语句必须在函数内部才能有效。

全局范围可以做一些事情:

  1. 命名空间声明和定义
  2. 全局变量声明
  3. 函数原型(prototype)和定义
  4. 模板和类的声明和定义
  5. 预处理器指令

必须在函数范围内的东西:

  1. 控制语句,例如 if 和 for
  2. 标签
  3. 函数调用

最后,上面的列表并不是全部。

关于c++变量没有在宏中命名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31567134/

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