当前位置: 首页 > news >正文

2018威胁网站检测平台建设建设局全称

2018威胁网站检测平台建设,建设局全称,汉中免费做网站,wordpress点击阅读全文目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符(函数调用操作符 ( )、&&、| |、? : 和 ,&#xff…

目录

1 表达式的运算次序

1.1 自增或自减操作符

1.2 函数参数

1.3 函数指针

1.4 函数调用

1.5 嵌套赋值语句

2 函数调用不作为函数参数

3 赋值语句的谨慎使用


1 表达式的运算次序

除了少数操作符(函数调用操作符 ( )、&&、| |、? : 和 ,)之外,子表达式所依

据的运算次序是未指定的并会随时更改。注意,运算次序的问题不能使用括号来解决,因为这不是优先级的问题。将复合表达式分开写成若干个简单表达式,明确表达式的运算次序,就可以有效消除非预期副作用。

1.1 自增或自减操作符

b[i] 的运算是先于还是后于 i ++ 的运算,表达式会产生不同的结果。i++ 是后置自增运算符,这意味着它会在表达式求值后增加 i 的值。因此,b[i] 的运算会使用 i 的当前值,然后 i 的值会增加 1。

x = b[i] + i++;

把自增运算做为单独的语句,可以避免这个问题。

x = b[i] + i;
i++;

1.2 函数参数

函数参数通常从右到左压栈,但函数参数的计算次序不一定与压栈次序相同。函数参数的求值顺序是未定义的,这意味着编译器可以以任意顺序计算参数表达式的值。例如:

x = func(i++, i);

在您提供的示例 x = func(i++, i); 中,参数 i++ 和 i 的求值顺序是不确定的,这可能导致 func 函数接收到的参数值是不确定的。为了确保代码的可预测性和正确性,应该修改代码明确先计算第一个参数:

i++;
x = func(i, i);

1.3 函数指针

函数调用中的参数求值顺序是未定义的,其中成员函数的地址和参数的计算次序同样是未定义的。例如:

p->task_start_fn(p++);

成员函数 task_start_fn 的地址和 p++ 的值都是在调用之前计算的,但是它们的计算顺序是不确定的。这意味着 p++ 可能会在 task_start_fn 的地址被计算之前或之后执行,导致 task_start_fn 可能被调用时使用的是 p 的原始值或增加后的值,这是不可预测的。

为了避免这种不确定性,您应该将 p++ 的计算与函数调用分开,确保 p 的值在调用函数之前已经被正确地更新。正确的做法是:

p->task_start_fn(p);
p++;

1.4 函数调用

C 语言标准为了给编译器实现留有一定的灵活性,并没有指定加法表达式中函数调用的先后顺序。例如如下示例:

int g_var = 0;
int fun1()
{g_var += 10;return g_var;
}int fun2()
{g_var += 100;return g_var;
}int x = fun1() + fun2();

编译器可能先计算fun1(),也可能先计算fun2(),由于x的结果依赖于函数fun1()、fun2()的计算次序,则上面的代码存在问题。应该修改代码明确fun1、fun2的计算次序:

int x = fun1(); 
x = x + fun2();

1.5 嵌套赋值语句

表达式中嵌套赋值操作可能会引入一些副作用,并且这些副作用可能会导致代码的执行结果依赖于特定的运算顺序。为了消除这种依赖于特定运算顺序的风险,最好是避免在表达式中进行嵌套赋值。例如下面的表达式:

x = y = y++;

y++ 是后置自增运算符,意味着 y 的值会在表达式求值后增加。这个表达式首先将 y 的当前值赋给 x 和 y,然后 y 的值增加 1。但是,由于 y 被赋值了两次,这可能会导致 x 和 y 的值不一致,因为 y 在自增后再次被赋值。

2 函数调用不作为函数参数

函数作为参数时,由于参数压栈次数不是代码可以控制的,可能造成未知的输出。因此谨慎将函数调用作为另一个函数的参数使用,否则对于代码的调试、阅读都不利。

int g_var;
int fun1()
{g_var += 10;return g_var;
}int fun2()
{g_var += 100;return g_var;
}int main(int argc, char *argv[], char *envp[])
{g_var = 1;printf("func1: %d, func2: %d\n", fun1(), fun2());g_var = 1;printf("func2: %d, func1: %d\n", fun2(), fun1());
}

优化后先将函数调用的结果赋值给对应的变量,再使用这些变量进行输出。

int main(int argc, char *argv[], char *envp[])
{g_var = 1;int result_fun1 = fun1();int result_fun2 = fun2();printf("incrementByHundred: %d, incrementByTen: %d\n", result_fun1, result_fun2);
}

3 赋值语句的谨慎使用

赋值语句不要写在if等语句中,因为if语句中,会根据条件依次判断,如果前一个条件已经可以判定整个条件,则后续条件语 句不会再运行,所以可能导致期望的部分赋值没有得到运行。例如:

int main(int argc, char *argv[], char *envp[])
{int a = 0;int b;if ((a == 0) || ((b = fun1()) > 10)){printf("a: %d\n", a);}printf("b: %d\n", b);
}
http://www.yayakq.cn/news/950764/

相关文章:

  • 网站本地可以打开学做网站的视频教学
  • 网站如何做信誉认证网站建设与管理的论文
  • 网站开发实验结论做网站怎么做推广
  • 郑州网站制作专业乐云seo济南百度爱采购
  • 简述网站制作的一般流程wordpress 网站标题图
  • 视频网站的嵌入代码是什么做网站公司-深圳信科
  • 手机建设网站广州 建设 招聘信息网站
  • 常州网站建设外包公司24小时学会网站建设下载
  • 图书馆网站建设需求分许网络销售如何推广
  • 建设信息门户网站淄博个人网站建设
  • 网站设置万事达u卡基层建设是哪个网站的
  • 公司做网站流程网站专业制作公司
  • wap网站在线生成内容营销策略分析
  • 建设一个招聘网站的策划wordpress小工具popular categories
  • 拱墅区建设局网站定制衣柜设计方案
  • 做网站在线支付系统多少钱?wordpress网站很卡
  • 邯郸网站制做网站常用代码向右浮动怎么写
  • 怎么做淘宝企业网站王也头像图片
  • 山东网站备案时间网站流量少
  • 网站开发页面设计电话营销话术
  • 中文域名转码网站小程序数据库怎么建立
  • 网站建设员岗位职责专业做曝光引流网站
  • 优惠网站代理怎么做系统如何安装wordpress
  • 网站关键词提升网站建设与网站制作
  • 南京网站seo服务wordpress登录密码忘了怎么办
  • 做华为网站的还有哪些功能吗猎头公司主要做什么
  • 小企业网站建设新市场报价html编辑器设置为word
  • 网站策划与运营课程认知外贸soho怎么建网站
  • 爱网站查询西安市城乡建设网站
  • 自己做网站编程怎样注册平台网站