什么是教育工具能够证明人们在C / C ++中所做的不必要的假设?
我想为SO准备一些教育工具,该工具应帮助初学者(和中级)程序员认识和挑战C,C ++及其平台中的不必要假设。 例子: “整数环绕” “每个人都有ASCII” “我可以将函数指针存储在void *中” 我认为一个小的测试程序可以在各种平台上运行,这些平台运行“合理”的假设,这些假设是根据我们在SO方面的经验,通常由许多没有经验/半经验的主流开发人员做出的,并记录了它们在不同机器上的破坏方式。 这样做的目的不是要证明做某事是“安全的”(这是不可能做到的,测试如果失败就只能证明任何事情),而是向即使是最不懂事的人也演示最不起眼的表情如果其他计算机具有未定义或实现定义的行为,则在另一台计算机上中断。。 为此,我想问你: 如何改善这个想法? 哪些测试将是好的,它们应该是什么样? 您是否可以在可以使用的平台上运行测试并发布结果,以便最终获得平台数据库,它们之间的差异以及为何允许这种差异? 这是测试玩具的当前版本: #include <stdio.h> #include <limits.h> #include <stdlib.h> #include <stddef.h> int count=0; int total=0; void expect(const char *info, const char *expr) { printf("..%s\n but '%s' is false.\n",info,expr); fflush(stdout); count++; } #define EXPECT(INFO,EXPR) if (total++,!(EXPR)) expect(INFO,#EXPR) /* stack check..How …