C语言中typedef不能与存储类型指示符同时用

C语言中,经常有如下的用法:

typedefstruct  tag
{
    ...
} MyType, *MyPtr;

一旦通过如上定以后,就可以用MyType来定义struct tag结构了。

以前我使用typedef的时候,是按照其字面意思理解的,所以进入了一个误区。比如说我想定义MyInt为int类型,我用的代码如下:

typedef MyInt int;

我把上述代码理解为:定义MyInt类型为int。一切好像都是顺其自然的事情,但编译的时候才知道错误。

其实,在C语言中声明变量的时候,有个存储类型指示符(storage-class-specifier),它包括我们熟悉的

extern
static
auto
register

在不指定存储类型指示符的时候,编译器会根据约定自动取缺省值。另外,存储类型指示符的位置也是任意的(但要求在变量名和指针*之前),也就是说以下几行代码是等价的:

static const int i ;

const static int i ;

int const static i ;

const int static i ;

根据C语言规范,在进行句法分析的时候,typedef和存储类型指示符是等价的!所以,我们把上述使用static的地方替换为typedef:

typedef const int i;

const typedef int i;

int const typedef i;

constint typedef  i;

上述代码的语义是:将i定义为一个类型名,其等价的类型为const int。以后如果我们有i a;代码,就等价于const int a;

对于有指针的地方也是一样的,比如:

int const typedef  * t;

那么代码

t  p;

就相当于

int const *p;

另外,typedef不能和static等存储类型指示符同时使用,因为每个变量只能有一种存储类型,所以代码:

typedef static int i;

是非法的。

 

Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=626440

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言typedef是一个关键字,其作用是为已有类型创建一个新的名称。通过typedef,可以给某个类型起一个别名,方便程序员在代码使用这个别名来代替原有的类型名。这样可以提高代码的可读性和可维护性。typedef的语法形式为:typedef类型名 新类型名; 例如,可以使用typedef来为int类型创建一个别名u_int,为int*类型创建一个别名int_p,为数组类型创建一个别名a,为结构体类型创建一个别名stu_t。使用typedef定义的别名可以像原类型一样使用。 另外,typedef还支持多层嵌套的形式,可以通过多次typedef来定义更复杂的类型别名。 最后需要注意的是,typedef是一种存储类的关键字,不能与其他存储类关键字(如auto、extern、static、register等)出现在同一个表达式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C语言typedef关键字](https://blog.csdn.net/qq_52670477/article/details/120009659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [typedef介绍](https://blog.csdn.net/liitdar/article/details/80069638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值