typedef static char int8;这个声明正确吗?

A:err

所以上面那个声明是错误的。

typedef为一种类型引入新的名字,而不是为变量分配空间,它并没有引入新的类型,而是为现有的类型取个新名字。在说到typedef时,有一个很好的例子是signal()函数声明,但是,一般而言只有极少数情况才会使用到这样的技巧,这里就不再赘述,我们应该知道更多关于typedef对于大多数程序员应该知道的事。

说到typedef就不能不说一下它的缺点。它同样具有与其他声明一样的混乱语法。可以把几个声明器塞到一个声明中去,例如:

typedef int *ptr,(*fun)(void),arr[];

ptr是指向int的指针类型;

fun是指向返回值为int的参数为void的函数的指针类型;

arr是长度为5的int型数组类型。

上面这样的写法应该尽量避免使用。

甚至typedef的位置不是必须放在声明的开始部分,例如:

#include<stdio.h>

int main(void)
{
int typedef a;
a b=;
printf("%d\n",b);
return ;
}

也不要把typedef嵌入到声明的中间部分,如下所示:

unsigned  long typedef int volatile *kumquat;

这样的表达式会让代码变得不好阅读!!!

我们使用typedef,是为了使代码更易于阅读,给已有类型取一个我们喜欢的别名,不要滥用或者乱用它。

再来看看typedef和define的区别

最基本的区别:

#define mychar char*
mychar a,b;
typedef char * yourchar;
yourchar c,d;

define是纯文本替换,如果用define定义的类型定义多个对象,那样只有第一个对象才是原本define的类型,在上面的例子中,b是char不是char*类型,但是c和d都是char *类型。

还有一个区别:

typedef是一种彻底的“封装”,在声明它之后不能再往里面增加别的东西,这和宏不同。

#define peach  int
unsigned peach i;//right
typedef int banana;
unsigned banana j;//err

知道这些之后,我们平时书写代码就应该遵循一些规范,把typedef放在声明的开始,并且一个类型用一个typedef修饰,不要在typedef类型前后加其他声明器。

C语言存在多种名字空间:
。标签名

。标签:这个名字空间用于所有的结构、枚举、联合。

。成员名:每个结构或联合都有自身的名字空间

。其他

在同一个名字空间里,任何名字必须具有唯一性,但在不同的名字空间里可以存在相同的名字。

由于在不同的名字空间使用同一个名字是合法的,所以这样的代码是可以通过编译的,但还是不建议这样书写。

struct foo{int foo;}foo;

typedef struct baz{int baz;} baz;

struct baz var1;

baz var2;

这些都是合法的。只有结构标签能够在以后的声明中使用(注意了!)。可以用typedef定义一个结构类型,这样可以省略struc的书写,也可以直接用struct 标签 变量的方式,就算使用了typedef也一样。

在使用typedef的时候,应该尽量避免混淆,做到思路清晰,代码可读性高。

再看一例:

#include<stdio.h>
typedef char * test;
int main(void)
{
const char * str=;
str++;// 正确底层const,常量指针,该指针指向的对象是常量,但指针自身可以改变
const test string=;
string++;//错误,typedef出的是类型别名 char *,此时加const修饰为指针常量,即该指针是常量。
return ;
}

前面说了,不要在使用了typedef的标识符前后再加修饰(上面例子在typedef声明的别名test前又加了一个const修饰),那样有可能和你想的不同。知道可能的坑,并善于利用typedef带给我们的便利,typedef可以成为你的朋友。

typedef可以成为你的朋友的更多相关文章

  1. C语言学习书籍推荐《C专家编程Expert C Programming Deep C Secrets》下载

    Peter Van Der Linden (作者) <C和C++经典著作 C专家编程Expert C Programming Deep C Secrets>展示了C程序员所使用的编码技巧, ...

  2. 19-typedef

    本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...

  3. #define与typedef在重定义类型中的区别

    #define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...

  4. typedef

    第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...

  5. 用typedef定义函数指针的问题

    在学习windows API的时候,遇到下面这段代码   以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName   这种给数据类型 ...

  6. C语言语法 typedef小结

    在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...

  7. 如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  8. C及C++中typedef的简单使用指南

    又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...

  9. [转]关于typedef的用法总结

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...

随机推荐

  1. 二十四种设计模式:观察者模式(Observer Pattern)

    观察者模式(Observer Pattern) 介绍定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新. 示例有一个Message实体类,某些对象 ...

  2. logback中打印sql语句

    To log SQL statements for particular mybatis mapper set DEBUG (TRACE to see query parameters and res ...

  3. LINUX之文件操作权限讲解

    r(Read,读取):对文件而言,具有读取文件内容的权限:对目录来说,具有浏览目 录的权限. w(Write,写入):对文件而言,具有新增.修改文件内容的权限:对目录来说,具有删除.移动目录内文件的权 ...

  4. scrapy-splash抓取动态数据例子四

    一.介绍 本例子用scrapy-splash抓取微众圈网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...

  5. RDD原理与详解

    RDD详解 原文连接 http://xiguada.org/spark_rdd/ RDD(Resilient Distributed Datasets弹性分布式数据集),是spark中最重要的概念,可 ...

  6. 【转】编译安装PHP并配置PHP-FPM

    1.前言上一篇讲述了如何编译安装MySQL,虽然可以通过yum install 或者rpm来安装,但是yum install和rpm安装有一个特点,就是有些参数是别人根据大众需求定制的,如果需要进行自 ...

  7. Visual Studio Image Library

    The Visual Studio Image Library Visual Studio 2013   The Visual Studio Image Library contains applic ...

  8. PHP上传文件代码练习2 (重复文章)

    表单: <html> <head> <meta http-equiv="Content-Type" content="text/html; ...

  9. windows系统中常用的快捷键

    开发中,一些常用的键盘技巧: (1)快速切换桌面(alt+tab)或者是(window+tab) (2)迅速关闭当前页面 (3)迅速收起所有页面 (4)直接回到桌面页面 (5)锁定你的屏幕

  10. [置顶] 原创鼠标拖动实现DIV排序

    先上效果图: 对比传统的排序,这是一个很不错的尝试,希望对大家有启发. 大家可以参考我的上一篇博文:http://blog.csdn.net/littlebo01/article/details/12 ...