我遇到了一个问题,其中#define用于替换程序中的'int',如下所示
#define type int
int main()
{
type *a,b;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的吗?虽然它在我试图打印变量b的大小时给了我错误,说b是未声明的.我想知道这背后的具体原因.请告诉我.
有些用户告诉我,我隐藏了部分代码.我没有在上面的代码片段中给出printf语句.下面是printf的代码和给出错误的代码
#define type int;
int main()
{
type* a, b;
printf("%d",sizeof(b));
}
Run Code Online (Sandbox Code Playgroud)
是的,它可以使用,但请记住,宏和类型定义之间存在显着差异.预处理器替换"机械"每个出现的令牌,同时typedef定义真实类型的同义词,因此后者被认为是推荐的方式.
这是一个简单的例子来说明它在实践中意味着什么:
#define TYPE_INT_PTR int*
typedef int *int_ptr;
int main(void)
{
TYPE_INT_PTR p1 = 0, p2 = 0;
int_ptr p3, p4;
p3 = p1;
p4 = p2; // error: assignment makes pointer from integer without a cast
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你可能期望类型的p2就是int*,但事实并非如此.预处理的行是:
int* p1 = 0, p2 = 0;
Run Code Online (Sandbox Code Playgroud)
另一方面,typedef定义两者p3和p4作为指针int.
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |