嵌入式学习小组
直播中

黄鸿江

7年用户 177经验值
私信 关注

typedef和#define的区别

关于自增自减(即++i,i++)
typedef和#define的区别
static变量的三种用法
static函数 —— 内部函数和外部函数

回帖(6)

汤玉荣

2021-2-5 09:42:52
  在学习单片机的时候才真正知道C语言是什么,它是来干什么的~但是C语言用到嵌入式只是它小小的一部分应用,还有很多地方呢。
  我们是不是在写程序的时候,错误很多就算编译通过了也达不到我们预期的结果,完了自己是不是也很难找到错在哪儿吧?我觉得语言之所以能称之为语言,它肯定是一种工具,一种相互交流相互通信相互传达之间的意图的工具,作为语言那肯定得有自己的语法,要想相互交流肯定得先学好它的语法吧(比如像表达式,函数,循环,指针)我称之为C语言的语法。C语言虽然很强大但是也有不少陷阱,所以写此文有两个目的,一是把C语言一些误用易错的地方总结一下,二是把C语言一些基本语法总结一下。
举报

李华

2021-2-5 09:43:07
  关于自增自减(即++i,i++)
  要想给一个数加一或减一我们可以:
  i += 1;
  j -= 1;
  而C语言还允许用++和--运算符,其实这里有误导,因为++和--可以作为前缀和后缀,这样的话他们就有可能改变操作数的值,下面让我们来看看:
  i = 1;
  printf(“i is %dn”,++i); /* prints i is 2 */
  printf(“i is %dn”,i); /* prints i is 2 */
  计算表达式i++的结果是i,但是会引发i随后进行自增:
  i = 1;
  printf(“i is %dn”,i++); /* prints i is 1/ */
  printf(“i is %dn”,i); /* prints i is 2 */
  第一个printf 显示了i自增前的原始值,第二个printf显示了i变化后的新值;当然 -- 类似就不举例了~
  但在同一个表达式中多次使用++和--往往很难理解,我们看看下面的例子:
  i = 1;
  j = 2;
  k = ++i + j++;
  i,j,k最终值分别是2,3,4而++i是2 j++是2;
  总结:不管是++i还是i++执行这条语句后i的值都加一了只是(++i)的值加一了而(i++)没变。
举报

王艳

2021-2-5 09:43:22
  typedef与#define
  2.1.typedef
  C语言除了直接使用标准的类型名(如 int char float double)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替现有的类型名。
  typedef unsigned char u8;
  typedef unsigned int u16;
  u8 count;
  u16 time;
  typedef struct
  {
  u8 month;
  u8 day;
  u16 year;
  }DATE;
  DATE brithday;
  总结一下,声明新的类型名的方法:
  先按定义变量的方法写出定义体(如 unsigned int i)
  在变量名换成新的变量名(如将 i换成u16)
  在最前面加上typedef (typedef unsigned int u16)
  然后用新类型名去定义变量
  2.2 #define
  2.1.1不带参数的宏定义
  #define 标识符 字符串
  #define PI 3.1415926
  注意:
  1.它的作用是在本程序中用指定的标识符PI来代替3.1415926
  2.宏定义是用宏来代替字符串也就是做简单的置换,不做正确性检查,如果写成
  #define PI 3.l4l6926
  即把1写成了字母l但是预处理照常代入不做任何语法检查!!
  2.1.2带参数的宏定义
  #define 宏名(参数) 字符串
  #define S(a,b) a*b
  area = S(a,b);
  #define MAX(x,y) (x)》(y) ? (x)y)
举报

李为敏

2021-2-5 09:43:34
  typedef和#define的区别
  一般来说typedef 能正确处理指针类型
  typedef char *String1;
  #define String2 char *
  String1 s1,s2;
  String2 s3,s4;
  s1,s2,s3 被定义为了char* ,但s4却被定义为了char型
举报

更多回帖

发帖
×
20
完善资料,
赚取积分