我刚刚获得了我必须做的作业的成绩,并且告诉我: 在hw2q1.c中找到的硬编码号码:
else if (number_letter < 6 && condition_r == 0) {
else if ((sum_value % 5) != 0 || number_letter > 4) {
if (number_letter < 6 && condition_r == 0) {
使用硬编码的电话减少10点。我不完全理解“硬编码”定义以及为什么我写if的原因是错误的。
谢谢;) PS:我的代码运行良好,并且成功通过了所有测试
答案 0 :(得分:3)
硬编码数字是整数文字。它们也称为magic numbers。
在您的代码中,它们是6, 0, 5, 4
。
那些阅读您的代码的人不会理解他们的意思。几周后,您可能都不记得了。
所以最好给这些数字起个名字。像这样:
const int number_letter_max = 6;
const int number_letter_min = 4;
const int condition_r_check = 0;
const int sum_value_divisible = 5;
然后您的代码变为:
else if (number_letter < number_letter_max && condition_r == condition_r_check) {
else if ((sum_value % sum_value_divisible ) != 0 || number_letter > number_letter_min ) {
if (number_letter < condition_r_check && condition_r == condition_r_check)
答案 1 :(得分:2)
硬编码常量是没有名称,或更确切地说是文字的常量。这些有两个缺点:
很难理解为什么常数具有该特定值。
它们通常发生不止一次,因此更改值需要在各处进行更改。这需要更多的工作并且有风险。
要解决此问题,您应该使用定义替换这些常量,而不要使用以下代码:
else if (number_letter < 6 && condition_r == 0) {
else if ((sum_value % 5) != 0 || number_letter > 4) {
if (number_letter < 6 && condition_r == 0) {
您应该这样写:
#define CONDITION_FALSE 0
#define NUMBER_LETTER_MIN 6
#define SUM_VALUE_DEVIDE_FACTOR 0
else if (number_letter < NUMBER_LETTER_MIN && condition_r == CONDITION_FALSE) {
else if ((sum_value % SUM_VALUE_DEVIDE_FACTOR) != CONDITION_FALSE || number_letter > NUMBER_LETTER_MIN - 1) {
if (number_letter < NUMBER_LETTER_MIN && condition_r == CONDITION_FALSE) {
显然,您应该将这些定义替换为对上下文有意义的更准确的描述。