- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 C
完全陌生,所以请多多包涵。我正在编写一个解析器来打开多个文本文件——每个大约 300 Kb,逐个字符地读取它们并提取所需的信息。处理分为三个不同的阶段,它需要大约十个不同的函数来处理每个字符串 block ,一个接一个。
由于文件不是很小而且可能有很多,我正在尝试编写一个高效且符合行业标准的代码。
在我看来,这些是我的选择:
A) 嵌套函数调用:假设我的 main
函数调用 read_file
,然后 read_file
调用 get_lines
,然后 get_lines
调用 get_name
等等。
这个解决方案的优点是,如果我在我的 read_file
函数中有一个 while
循环,那么我可以直接在循环内调用 get_name
功能;但是,如果我将数据从 get_lines
函数返回到 main
,那么我必须再次循环并将数据传递给 get_name
。
这里的问题是它不是一种很有条理的做事方式。在这种情况下,我的主函数只会调用 read_file
函数,然后最后将输出数据写入文件。
我猜 main
函数应该控制程序的整体执行,这意味着它应该调用一个函数来执行一些业务逻辑,然后检索数据并将其传递给下一个函数,很快。我是对的还是错误的假设?
B) 全局变量:这样我将定义几个全局变量,然后我将直接处理它们,而不需要将它们从这个函数传递到另一个功能。
既然不需要在函数生命周期结束时返回数据,那么效率肯定更高;但是,一般来说,我不是全局变量 的忠实拥护者,即使在静态类型和同步环境中也是如此。不过,我可能对此感到不必要的担心。
C) 传递指针:对我来说,这似乎是我应该去做的方式;然而,由于这些数据在函数范围内是本地的,所以我将使用Wild Pointers。 static
关键字解决了无效指针的问题;然而,似乎更有经验的人出于某种原因试图避免使用它。所以我不太确定这是否是一个好的做法。
问题:我在C
方面没有任何实际经验,因此我看不出上述解决方案的真正优缺点。例如,与使用全局变量相比,使用 static
关键字并传递指针是否有任何优势?
换句话说,在这个特定案例中,每种方法的优缺点的简短列表肯定会帮助我从三种方法中选择一种。
最佳答案
就问题而言,全局和局部静态变量的行为方式相同。出于特定功能的考虑,它们都算作“全局”,因此不能同时从多个调用(从多个并发线程调用)中使用 end。
要回答这个问题,需要了解此代码的要求和最终目标。
有些任务需要最终数据集作为结果——这些数据会随着文件的增加而增长,但在使用之前仍然必须完成。作为示例,您可以想到文件(或文件集)中的唯一单词列表。
其他任务允许迭代方法 - 您可以多次调用函数,每次检查返回值并处理它。一些特定的返回值表示没有更多数据,此时您应该停止调用它。示例是文件读取函数,例如 fread
- 您多次调用它,并且每次它都从上次停止的地方继续读取。同样的任务可以通过形成完整的数据集来完成——比如根据需要分配尽可能多的内存并将整个文件读入其中;这是完全不同的,不太灵活的方法。然而,某些更高级别的任务(处理数据的任务)可能需要它。
有些任务允许两种方法,例如XML 解析可能是 DOM 或 SAX。但是,仍然有一个更高级别的目标决定使用哪种方法(DOM 可能更容易使用,但如果数据是从慢速源(例如互联网)获取的,则首选 SAX,同时需要至少显示部分数据尚未完全加载的数据)。
关于c - 避免在函数调用之间传递大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766967/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!