【发布时间】:2021-05-04 18:10:30
【问题描述】:
在宏中,我希望使值具有相同的宽度,但无符号。所以,一个自然的unsigned typeof(x) 浮现在脑海中。但是,它不能编译:
/home/guest/mc.c: In function ‘main’:
/home/guest/mc.c:14:36: error: expected ‘)’ before ‘typeof’
14 | *((unsigned typeof(minus)*)&minus));
我想知道为什么会这样?也许我做错了什么?我可以以某种方式将unsigned 添加到变量的类型中吗?
PS。我已经注意到,添加const 的类似演员可以正常工作:
#define add_const(x) ((const typeof(x))(x))
另外,添加* 来创建指针类型也可以。
【问题讨论】:
-
unsigned typeof(x)-->typeof(unsigned x) -
@DavidRanieri:但是
x是一个变量,而不是一个类型。在myvar前面加上unsigned会做什么? -
typeof不是 C,它是编译器扩展。unsigned与const和*非常不同,看看它们如何使用 typedef 名称(提示:与typeof完全相同)。 -
我假设这篇文章是指 GCC 扩展
typeof,并更改了标签。在讨论 C 语言的特定扩展时,请说明您使用的是哪个编译器。 -
@n.'pronouns'm.:
typeof是 C per C 2018 4 7,它有效地将符合标准的编译器的所有扩展定义为符合标准的代码。 C 的设计不像 Java 那样程序应该普遍地移植到不同的实现中。它旨在实现可移植到不同的系统和环境。这就是为什么它允许int的宽度和许多其他选项的灵活性。扩展是 C 的一个正常、预期和期望的部分。C 提供了一种基础语言,人们可以舒适地使用它进行编程,同时还可以使用对他们的需求有用的扩展。
标签: c gcc casting unsigned typeof