首页 >后端开发 >C++ >C/C 程序员经常做出哪些毫无根据的假设?

C/C 程序员经常做出哪些毫无根据的假设?

Linda Hamilton
Linda Hamilton原创
2024-10-30 18:37:31832浏览

What Unfounded Assumptions Do C/C   Programmers Often Make?

C/C 平台中存在哪些毫无根据的假设?

简介

许多新手和经验丰富的 C 和 C 程序员经常使用做出错误的假设会导致错误的代码。认识和挑战这种毫无根据的假设对于改进编码实践至关重要。

测试建议

为了演示和挑战这些假设,请考虑以下测试程序,该程序检查各种“可以想象的” " 程序员通常做出的假设:

<code class="c">#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

int main() {
    // Character-related Assumptions
    EXPECT("00: ASCII is consistent", ('A' == 65));
    EXPECT("01: A-Z forms a contiguous block", (('Z' - 'A') + 1 == 26));
    EXPECT("02: Uppercase letters precede lowercase letters", ('A' < 'a'));
    EXPECT("03: A character is 8 bits", (CHAR_BIT == 8));
    EXPECT("04: Characters are signed", (CHAR_MIN == SCHAR_MIN));
}</code>

其他测试

  • 整数假设:

    • 测试整数的补码行为:(int_max 1) == (int_min) 和 (INT_MAX 1) == (INT_MIN)
    • 验证过度移位是否始终安全:(1
    • 检查从左向右移位是否正确,即使是负移位:(t = -1, (15
  • 指针假设:

    • 测试 void* 是否可以存储函数指针:sizeof (void*) >= sizeof(void(*)())
  • 执行假设:

    • 检查如果检测堆栈增长方向可靠: check_grow(5, 0) != 0 且 check_grow(5, 0)
  • 其他假设:

    • 验证 sizeof(char) 是否小于 sizeof(short), sizeof( Short) 小于 sizeof(int),sizeof(int) 小于 sizeof(long)
    • 判断 size_t 和 ptrdiff_t 大小是否相同: sizeof(size_t) == sizeof(ptrdiff_t)
    • 检查子表达式从左到右的求值是否一致,即使使用函数调用也是如此: (ltr_fun(1) * ltr_fun(2) * ltr_fun(3) * ltr_fun(4), ltr_result == 1234)

参与和协作开发

要为项目做出贡献,请考虑以下平台:

  • GitHub 存储库: https://github.com/lutherblisset/disenchanter
  • Stack Overflow 讨论: [原始 Stack Overflow 问题的链接]

通过提交补丁或者提供新的想法,可以帮助提高测试程序的准确性和全面性。

以上是C/C 程序员经常做出哪些毫无根据的假设?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn