从 C 中的另一个函数调用 main 函数

2024-02-07

我有一个主函数,它在初始化期间运行一些函数,然后运行一个等待来自 UART 的命令的 while 循环。

当我看到特定命令(比如说重置)时,我会调用一个返回值的函数。我想做以下事情:

  1. 保存返回值
  2. 使用返回值再次启动主函数。 main 中的函数初始化期间需要返回值。

我是 C 新手,我无法找到在 main 中保存变量值的方法。


根据我的理解,您基本上有以下设置:

int main(int argc, char *argv[]) {
    int value = something_from_last_reset;
    perform_initialization(value);
    while(1) {
        int next_command = wait_for_command();
        if(next_command == RESET_COMMAND) {
            value = get_value();
            // somehow restart main() with this new value
        }
    }
    return 0;
}

您可以采取以下一种方法:

// global
int value = some_initial_value;

void event_loop() {
    while(1) {
        int next_command = wait_for_command();
        if(next_command == RESET_COMMAND) {
            value = get_value();
            return; // break out of the function call
        }
    }
}

int main(int argc, char *argv[]) {
    while(1) {
        perform_initialization(value);
        event_loop();
    }
    return 0;
}

这本质上可以让您“逃离”事件循环并重新执行初始化。

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

从 C 中的另一个函数调用 main 函数 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 汇编程序中的过程调用如何工作?

    我刚刚开始摆弄 ASM 我不确定我对过程调用的理解是否正确 假设代码中的某个时刻有一个过程调用 call dword ptr 123 该过程仅包含一个命令 ret ret 0004 该过程调用的效果是什么 返回值将存储在哪里 我在某处读到
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 对每个请求执行代码

    我希望能够对每个将数据填充到 ViewData 的请求执行一些代码 目前 我有一个基本控制器类 我的所有控制器都继承自该类 并且我重写 OnActionExecuting 并在那里执行它 我对这种方法唯一关心的是 创建新控制器的人必须继承基
  • 在事件处理程序中发送不带 XHR 的 http 请求

    如何使用 javascript 作为事件处理程序通过 post get 方法发送 http 请求 谢谢 保罗 好吧 你不想使用 Ajax 您可以使用事件处理程序来提交表单 a href send a
  • Salesforce PhoneGap iPhone 应用程序中的 oAuth2 问题(远程访问应用程序授权问题)

    我使用 PhoneGap 创建了一个 iPhone 应用程序 我遵循了本教程中的代码 构建由 Database com 提供支持的 PhoneGap 移动应用程序 http wiki developerforce com page Buil
  • Android listview - 获取自定义列表视图的文本

    我正在开发一个应用程序 在其中创建了一个自定义列表视图 列表视图xml代码如下
  • 使用 Python 实现 AutoCAD 自动化

    我对 Python 和 AutoCAD 非常陌生 所以请耐心等待 我正在尝试使用 Python 来自动化 AutoCAD 中的设计周期 到目前为止 我可以通过 Python 在 AutoCAD 中添加点和线 但我希望能够将线型更改为虚线 我
  • 安全的原子文件复制操作

    我需要将文件从一个位置复制到另一个位置 如果文件已存在于目的地 不覆盖 我需要抛出异常 或至少以某种方式识别 我可以首先使用 os path exists 检查 但极其重要的是 不能在检查和复制之间的短时间内创建文件 是否有一种内置的方法可
  • 从 XBee 接收的 pySerial 数据未正确显示

    我正在尝试让多个 XBees 作为传感器和输出设备运行 以将其样本发送到按如下方式连接的协调器 XBee 并根据指示打开和关闭这些远程 XBees 上的开关 我的这个 收到数据 问题似乎与 Stack Overflow 问题类似pySeri
  • 用于显示和编辑的 MVC 同一视图

    我有一个部分视图用于在弹出对话框中编辑人员详细信息 但他们也希望有 显示 模式 该模式禁用视图中的所有可编辑文本框 下拉列表框和链接 有人可以告诉我如何轻松实现这 不使用 JavaScript 您可以使用带有条件的相同视图来禁用编辑器 但这
  • sun.misc.Signal 的替代品

    我开始研究寻找替代方案sun misc Signal类 因为即将推出的 JDK 可能不支持它 我们目前正在开发 1 6 当我构建项目时 我得到 警告 sun misc SignalHandler 是 Sun 专有的 API 可能是 在未来版
  • 无法将类型“string”隐式转换为“System.Collections.Generic.List

    这个问题可能已经被回答了数百次 但这里是 我有这段代码 private void PopulateStringDropdownList List
  • 使用CursorLoader获取邮件导致邮件重复

    我正在尝试获取用户联系人的电子邮件 ID 为此 我使用游标加载器 有一个问题 我也收到重复的电子邮件 ID 如何删除重复的电子邮件 我应该使用原始查询 SELECT DISTINCT 而不是使用 CursorLoader 还是有其他解决方案
  • 测试初始化​​中的 EntityFramework 错误:多语句事务中不允许 CREATE DATABASE 语句

    我正在尝试构建一个快速测试 每次运行时都会删除并重新创建数据库 我有以下内容 TestClass public class PocoTest private TransactionScope transactionScope private
  • 检测程序何时打开 fifo

    我遇到一种情况 我需要检查 fifo 的另一侧是否已打开它 但是我不能使用 open 因为否则程序将开始执行操作 为什么我必须这样做 我有一个程序 监视器 来启动服务器程序 都是我创建的 监视器使用此 fifo 进行通信 因为监视器可以在服
  • 分配大的 DMA 缓冲区

    我想分配一个大的 DMA 缓冲区 大小约为 40 MB 当我使用dma alloc coherent 它失败了 我看到的是 cut here WARNING at mm page alloc c 2106 alloc pages nodem
  • CORS - Angular 和 Express 的 http OPTIONS 错误

    我正在尝试从 Angularjs 客户端向我的 API 发送 POST 我在另一个域中运行的服务器上有此配置 app use function req res next res setHeader Access Control Allow
  • 如何使用 POI 删除合并区域?

    我知道我们可以使用sheet addMergedRegion range 合并单元格 我想知道如何删除合并 我们可以使用sheet removeMergedRegion int 如果是 那么告诉我应该争论什么 合并单元格中存在的数据将会发生
  • 在 akka.net 中立即触发多个线程

    我不确定这是否与 akka net 或 TPL 更多相关 但我将使用 actor 作为示例来澄清问题 简而言之 问题是 有什么方法可以告诉 akka net 一次触发比我实际拥有的 CPU 核心更多的线程吗 这是示例代码和详细信息 我目前使
  • D3 和​​ jQuery 有什么区别?

    参考这个例子 http vallandingham me stepper steps html http vallandingham me stepper steps html 看起来 D3 和 jQuery 库非常相似 因为它们都以对象链
  • 如何将 Visual Studio 默认为 C# 项目而不是 VB.NET?

    Visual Studio 2010 一直默认为 VB NET 项目而不是 C 我从 2008 年导入了保存的设置 该设置默认为 C 项目 但没有解决问题 我总是不小心创建了 VB NET 项目 然后打自己的脸 然后继续删除该项目并重新创建
  • 从 C 中的另一个函数调用 main 函数

    我有一个主函数 它在初始化期间运行一些函数 然后运行一个等待来自 UART 的命令的 while 循环 当我看到特定命令 比如说重置 时 我会调用一个返回值的函数 我想做以下事情 保存返回值 使用返回值再次启动主函数 main 中的函数初始