有什么例子可以说明了解 C 语言可以让我用任何其他语言编写更好的代码?

2024-04-15

在 Stack Overflow 播客中,Joel Spolsky 不断地抱怨 Jeff Atwood 不知道如何用 C 语言编写代码。他的说法是“了解 C 可以帮助你编写更好的代码”。他还总是使用某种涉及字符串操作的故事,以及了解 C 如何让您用不同的语言编写更有效的字符串例程。

作为一个懂一点 C,但喜欢用 Perl 和其他高级语言编写代码的人,我从来没有遇到过可以通过编写 C 来解决的问题。

我正在寻找现实世界中的示例,在这些示例中,了解 C 在使用 Perl 或 Python 等高级/动态语言编写项目时会很有用。

编辑:阅读你们提交的一些答案非常棒,但在这方面对我来说仍然没有任何意义:

以 strcat 为例。在 C 中组合字符串有正确的方法和错误的方法。但是为什么我(作为高级开发人员)应该认为我比 Larry Wall 聪明呢?为什么语言设计者不以正确的方式编写字符串操作代码?


Joel Spolsky 使用的经典示例是误用 strcat 和 strlen http://www.joelonsoftware.com/articles/fog0000000319.html,并发现“画家 Shlemiel”的一般算法。

这并不是说您需要 C 来解决高级语言无法解决的问题,而是充分了解 C 可以让您了解所有这些级别的语言背后正在发生的事情,从而使您能够编写更好的软件。因为这样的视角可以帮助您避免编写您不知道的代码,例如,实际上 O(n^2)。

Edit:根据评论进行一些澄清。

知道C并不是获得此类知识的先决条件,获得相同知识的方法有很多种。

懂得 C 语言也并不能保证具备这些技能。你可能精通 C,但仍然用你接触过的其他语言编写出可怕、糟糕、笨拙的代码。

C 是一种低级语言,但它仍然具有现代的控制结构和函数,因此您不会总是陷入繁琐的细节中。如果不掌握某些基础知识(例如内存管理和指针的细节),就很难精通 C 语言,而掌握这些基础知识在使用任何语言时通常都会带来丰厚的回报。

它始终与基本原理有关。

在许多追求以及软件工程中都是如此。使最好的程序员成为最好的并不是秘密咒语,而是对基础知识的更好掌握。经验表明,C 语言知识往往与掌握某些基础知识具有更高的相关性,并且学习 C 语言往往是获取此类知识的更容易和更常见的途径之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么例子可以说明了解 C 语言可以让我用任何其他语言编写更好的代码? 的相关文章

  • Asp.net core默认路由

    简化版Startup code public void ConfigureServices IServiceCollection services services AddMvc public void Configure IApplica
  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 对多个对象使用事件处理程序

    我有 20 件物品List

随机推荐