c
coding_qiao
直到世界尽头
展开
-
c语言陷阱2
int a=0;int b=5;a=(++b)+(++b)+(++b);在执行以上c语言语句的时候发现vc的编译器和gcc出现了不同的结果vs2019编译执行的结果是24,而gcc编译的结果是22不知道你有没有也遇到过这种情况?这是编译器处理的结果1.vs2019编译生成的汇编在查看汇编之后,发现是vc编译器同时看到了三个(++b),在做完三次++操作后才开始做括号外的加法,所以结果是8+8+8=242.gcc编译生成的汇编gcc只看到了前两个(++b),在做完两次++b后,就开始原创 2020-12-31 17:06:53 · 221 阅读 · 0 评论 -
c的陷阱
x=y/*p /y除以p所指向的值,得到的结果赋给x/程序员的本意应该是y除以p所指向的值,再把值赋给x,编译器在看到/*后就认为是注释的开始,而不会看到p。以上可以重写为:x=y/ *p或者写成x=y/(*p)这样就可以避免程序出现二义性,在上下文中可能会招惹麻烦又例如在老版本的c语言中允许=+来代替+=的含义,这种老版本的编译器就会将a=-1,理解为a =- 1即a = a - 1如果程序员的本意是a = -1,那就违背了程序员设计的程序的本意诸如这样的问题,可能作为一个资原创 2020-12-29 17:46:40 · 194 阅读 · 0 评论