找到硬编码号码

时间:2018-12-06 13:09:44

标签: c if-statement

我刚刚获得了我必须做的作业的成绩,并且告诉我:⁨ 在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:我的代码运行良好,并且成功通过了所有测试

2 个答案:

答案 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) {

显然,您应该将这些定义替换为对上下文有意义的更准确的描述。