gpt4 book ai didi

c++ - #define 和 typedef 在使用其名称定义变量时的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:04 28 4
gpt4 key购买 nike

这是对这个问题的跟进 here .

typedef int foo;
#define bar int

int main() {
bool foo = true; // ok
bool bar = true; // fail
}

typedef 可以工作,但我很想知道这里的 typedef 是如何工作的?

关于 foo 的最终编译代码看起来如何?根据几个答案, typedef 是一个别名,允许隐藏别名。因此代码有效。

谁能解释一下?

最佳答案

通常允许使用类型名称来定义具有相同名称的变量我的意思是:

typedef int foo; // can't be in the same scope as the below definitions
struct foo { foo(int) {} }; // same thing as above

int foo = 0; // ok
foo bar = 1; // ok
foo foo = 2; // ok

但是对于#define foo int,没有foo类型/别名:

#define foo int
int foo = 0; // fail
foo bar = 1; // ok
foo foo = 2; // fail

上面实际上是(预处理器运行后):

int int = 0; // fail
int bar = 1; // ok
int int = 2; // fail

如果您有另一个定义,bool foo = true;,那么它将变成 bool int = true;,同样无法编译。

但有一个异常(exception):int 是一个保留关键字,这意味着您不能用该名称定义任何变量。但如果它是另一种类型,如 struct bar{};,那么该部分将编译。

关于c++ - #define 和 typedef 在使用其名称定义变量时的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719583/

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