首页 > 后端开发 > C++ > 正文

您的 C/C 代码是否做出了无根据的假设?

Mary-Kate Olsen
发布: 2024-10-31 04:22:31
原创
409 人浏览过

 Is Your C/C   Code Making Unwarranted Assumptions?

在 C/C 中展示无根据的假设

如何改进这个教育工具?

为了提高使用此工具,请考虑以下建议:

  • 合并条件编译:使用条件编译来测试基于特定平台特征的假设。例如,如果您的测试程序依赖于特定平台相关的功能,则可以使用 #ifdef 或 #if __GNUC__ 来根据不同的编译器环境定制测试。
  • 展开测试用例: 包括更广泛的测试用例,以涵盖程序员做出的更常见的假设。示例包括:

    • “浮点算术是关联的”
    • “void* 的大小与最小可寻址单元的大小相同”
    • “负数的符号始终是 -”
  • 自动化测试: 创建脚本或自动化工具来执行测试并收集结果不同的平台。这将简化测试过程,并更容易维护平台差异数据库。

哪些测试会很好,它们应该是什么样子?

1.字符假设:

  • 测试:验证所有平台上的 'A' == 65。
  • 代码:

    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>
    登录后复制
    登录后复制
  • 测试:检查假设 'a'
  • “A”有效。
  • 代码:

    <code class="c">EXPECT("02 big letters come before small letters",('A'<'a'));
    登录后复制
  • 测试:
  • 测试如果 char 的大小始终为 8 位。
  • 代码:

    <code class="c">EXPECT("04 a char is 8 bits",CHAR_BIT==8);
    登录后复制

2.整数假设:

  • 测试:
  • 检查整数使用补码表示和环绕的假设是否有效。
  • 代码:

    <code class="c">EXPECT("06 integers are 2-complement and wrap around",(int_max+1)==(int_min));
    登录后复制
  • 测试:
  • 检查 int 的大小是否与 a 的大小相同的断言void* 在所有平台上均成立。
  • 代码:

    <code class="c">EXPECT("05 int has the size of pointers",sizeof(int)==sizeof(void*));
    登录后复制

3 。指针假设:

  • 测试:
  • 验证 sizeof(void*) 始终大于或等于 sizeof(void(*)())。
  • 代码:

    <code class="c">EXPECT("10 void* can store function pointers",sizeof(void*)>=sizeof(void(*)()));</code>
    登录后复制

4.执行假设:

  • 测试:
  • 测试堆栈是否始终向下增长。
  • 代码:

    <code class="c">EXPECT("12 the stack grows downwards",check_grow(5,0)<0);</code>
    登录后复制
  • 测试:
  • 检查表达式求值始终从左到右的假设。
  • 代码:

    <code class="c">EXPECT("00 we have ASCII",('A'==65));</code>
    登录后复制
    登录后复制

您会在您可以使用的平台上运行测试并发布结果吗?

我们鼓励社区参与在不同平台上测试假设。请分享您的结果以及以下信息:

  • 平台详细信息(操作系统、编译器版本、架构)
  • 与预期结果观察到的任何差异
  • 原因可能会出现差异(例如,编译器优化、特定于平台的实现)

以上是您的 C/C 代码是否做出了无根据的假设?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板