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

广州建设银行投诉网站深圳网站导航

广州建设银行投诉网站,深圳网站导航,秦皇岛网站团队,会员管理系统哪个好用目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符#xff08;函数调用操作符 ( )、、| |、? : 和 ,#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.w-s-a.com/news/996580/

相关文章:

  • asp 网站源码 下载西安自适应网站建设
  • 白领兼职做网站贵阳网站设计哪家好
  • 热水器网站建设 中企动力企业网站开发需要多钱
  • 北京市建设工程信息网交易网站静态网页模板免费下载网站
  • 福田欧曼服务站网站前台设计
  • 网站做系统叫什么软件吗注册域名需要实名认证吗
  • jsp网站开发教学视频ui设计风格
  • 注册网站建设开发怎么自己做导航网站
  • 设计做网站品牌咖啡主题网页界面设计
  • 个人网站制作总体设计宿迁房价2023年最新房价
  • 服装网站建设进度及实施过程马鞍山网站设计制作
  • 郑州网站优化顾问济宁网站制作
  • 网站开发简单吗网站引导页分为三个板块设计风格
  • 湖南做网站 在线磐石网络百度一下百度搜索
  • 现在建网站多少钱推广营销费
  • 联想企业网站建设的思路西安网站建设阳建
  • 网站内容 内链网站建设电话销售工作总结
  • 系统网站开发知名的摄影网站有哪些
  • 网站拍照的幕布扬中网站建设价位
  • 网站ie兼容性差西安小程序开发的公司
  • 上海网站建设培训app网站开发成本
  • 个人网站icp外贸网站开发 河南
  • 遵义建设网站无锡市规划建设局网站
  • 海外留学网站建设方案门户网站的发布特点
  • 网站建设不赚钱net112企业建站系统
  • 网站建设团队管理模板贵州省住房和城乡建设部网站
  • 曲沃网站建设网上学编程的有哪些比较好的网站
  • 厦门网站建设慕枫学做网站需要多久
  • 爱奇艺做任务领vip网站设计广告图片
  • 中科汇联网站建设手册上海公司名称注册查询网