【发布时间】:2015-08-25 10:24:23
【问题描述】:
我遇到了一个问题,在程序中用#define代替int如下
#define type int
int main()
{
type *a,b;
}
这有效吗?尽管在我尝试打印变量 b 的大小时它给了我错误,说 b 未声明。我想知道这背后的具体原因。请告诉我。
一些用户告诉我,我隐藏了部分代码。我没有在上面的代码 sn-p 中给出printf 语句。下面是带有printf 的代码和给出错误的代码
#define type int;
int main()
{
type* a, b;
printf("%d",sizeof(b));
}
【问题讨论】:
-
您显示的代码 sn-p 完全有效。它将
a声明为指向int的指针,将b声明为int。预处理器简单地将符号type的所有实例替换为扩展名为int。如果您遇到错误,请使用您未向我们显示的其他代码。 -
你在哪里打印
sizeof(b)? -
使用
%zu转换说明符打印size_t类型的参数。 -
宏是文本替换。 'int' 之后的分号也将被替换,因此您的声明为
int;* a, b,这是一个语法错误。从您的宏定义中删除分号:#define type int,就像在您的第一个示例中一样。 -
检查宏定义的结尾。那个分号不应该在那里。
标签: c macros c-preprocessor typedef