43

我的任务要求我访问一个test.txt文档,因此文件名必须硬编码到我的 C 盘。我不知道硬编码是什么意思。有人可以帮我吗?

4

5 回答 5

71

“硬编码”意味着将某些内容放入您的源代码中。如果您不是硬编码,那么您可以执行诸如提示用户输入数据之类的操作,或者允许用户将数据放在命令行上,或类似的操作。

因此,要将文件的位置硬编码为位于 C: 驱动器上,您只需将文件的路径名放在源代码中即可。

这是一个例子。

int main()
{
    const char *filename = "C:\\myfile.txt";

    printf("Filename is: %s\n", filename);
}

文件名被“硬编码”为:C:\myfile.txt

反斜杠加倍的原因是因为反斜杠在 C 字符串中是特殊的。

于 2009-12-13T07:04:12.977 回答
15

“硬编码”是指您想嵌入到您的程序或任何无法直接更改的项目中的东西。例如,如果您使用的是数据库服务器,那么您必须硬编码以将数据库与您的项目连接起来,并且用户无法更改。因为你已经硬编码了。

于 2015-01-18T20:08:57.880 回答
8

硬编码的反义词是软编码。为了更好地理解硬编码,我将介绍这两个术语。

  • 硬编码:功能被编码到系统中,不允许配置;
  • 参数:特性可通过表格驱动或具有有限参数值的属性文件进行配置;
  • 软编码:功能使用基于任意数量的参数值(例如 BRE 中的业务规则)得出结果的“引擎”;规则被编码但作为参数存在于系统中,以脚本形式编写

例子:

// firstName has a hard-coded value of "hello world"
string firstName = "hello world";

// firstName has a non-hard-coded provided as input
Console.WriteLine("first name :");
string firstName = Console.ReadLine();

硬编码常量[1]

float areaOfCircle(int radius)
{
    float area = 0;
    area = 3.14*radius*radius;  //  3.14 is a hard-coded value
    return area;
}

此外,硬编码和软编码可以被认为是反模式[2]。因此,人们应该努力在硬编码和软编码之间取得平衡。

  1. 硬编码 “<strong>硬编码”是一种众所周知的反模式,大多数 Web 开发书籍都在前言中警告我们。硬编码是一种不幸的做法,我们在源代码中存储配置或输入数据,例如文件路径或远程主机名,而不是从配置文件、数据库、用户输入或其他外部源获取它. 硬代码的主要问题是它只在一定的环境下才能正常工作,而且任何时候条件发生变化,我们都需要修改源代码,通常在多个不同的地方。



  2. 软编码
    如果我们非常努力地避免硬编码的陷阱,我们很容易遇到另一种称为“<strong>软编码”的反模式,它正好相反。

    在软编码中,我们将应该在源代码中的东西放到外部源中,例如我们将业务逻辑存储在数据库中。我们这样做的最常见原因是担心未来业务规则会发生变化,因此我们需要重写代码。

    在极端情况下,软编码程序会变得如此抽象和复杂,以至于几乎无法理解(尤其是对于新团队成员),并且极难维护和调试

来源和引文:

1:Quora:在计算机编程环境中,硬编码的东西是什么意思?
2:Hongkiat:你必须避免的 10 种编码反模式

延伸阅读:

Software Engineering SE:将值硬编码到我们的应用程序中是否是个好主意?
维基百科:硬
编码 维基百科:软编码

于 2018-01-04T04:52:01.480 回答
3

设想

在一个大学里,有很多学生在做不同的课程,考试结束后我们必须准备一张成绩卡来显示成绩。我可以通过两种方式计算成绩

1.我可以写一些这样的代码

    if(totalMark <= 100 && totalMark > 90) { grade = "A+"; }
    else if(totalMark <= 90 && totalMark > 80) { grade = "A"; }
    else if(totalMark <= 80 && totalMark > 70) { grade = "B"; }
    else if(totalMark <= 70 && totalMark > 60) { grade = "C"; }

2.您可以要求用户在某个地方输入等级定义并保存该数据

类似于存储到数据库表中的东西 在此处输入图像描述

在第一种情况下,所有课程的等级都是通用的,如果规则发生变化,则需要更改代码。但是对于第二种情况,我们为用户提供了根据他们的要求输入等级的规定。所以当等级规则改变时,代码不会改变。

当您为用户定义业务逻辑提供更多配置时,这一点很重要。第一种情况只不过是Hard Coding

因此,在您的问题中,如果您要求用户在开始时输入文件的路径,那么您可以删除代码中的硬编码路径。

于 2018-01-21T10:09:53.363 回答
2

有两种类型的编码。

(1) 硬编码 (2) 软编码

硬编码。在编写源代码的过程中为程序赋值,并制作程序的可执行文件。现在,更改或修改程序源代码值是非常困难的过程。与区块链技术一样,创世块是无法更改或修改的硬代码。

软编码:将外部来源的值插入计算机程序的过程。比如通过键盘、命令行界面插入值。软编码被认为是良好的编程实践,因为开发人员可以轻松地修改程序。

于 2019-11-19T12:41:30.763 回答