×

C ---------- 使用#define定义一个带参数的宏,注意事项

C语言学习

C ---------- 使用#define定义一个带参数的宏,注意事项

zxjy辉 zxjy辉 发表于2023-12-11 浏览1773 评论0

应避免使用使用宏定义 带参数的表达式,因为会导致多次求值,导致结果和预期不符


例如 #define max(a,b)  (a)>(b)?a:b

上述的这个宏定义带参表达式,在使用带有++,--方式时,就会导致重复求值,该表达式,一共进行两次求值,一次是在判断 a是否大于b,另一次则是,输出max(a,b)结果的时候

举个例子

C语言学习

C ---------- #define 与 typedef 的区别

zxjy辉 zxjy辉 发表于2023-12-11 浏览1507 评论0

区别还是挺大的,要注意辨别,尤其是在多个变量的时候


都可以用来定义一个别名,

#define otherName  Name

typedef Name otherName;

区别在于,多个变量定义的时候,尤其在定义指针的时候

#define D_otherName Name*

typedef Name*  T_otherName;

例如:

D_otherName a,b;    这个扩展为: Name *a,b; 在这里 a变量表示指针,而b变量则不是指针

C ---------- 关于结构体全是指针,整体进行赋值,导致数据错误

C语言学习

C ---------- 关于结构体全是指针,整体进行赋值,导致数据错误

zxjy辉 zxjy辉 发表于2023-10-08 浏览1819 评论0

未知的错误(?),解决了但是又好像没解决


  1. 通过结构体整体赋值的方式,可能是由于空间分配不足的问题,导致数据错误,在结构体中添加了一个有具体大小的数组,数据不产生错误,在图2中,就是直接将数据进行赋值,然后出现莫名的错误,由于之前的出现过相似的问题,果然,在图1中加入一个有具体大小的数组,错误就消失了