从 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 函数 的相关文章

  • C++ 中的类 C# 事件,组合

    在过去的几个月里 我经常使用 C 并习惯了事件和委托 在类中使用组合非常容易 只需使用事件从组件获取消息 现在我正在尝试在 C 中做类似的事情 但不知道如何做 C 中的组合是如何完成的 我想到的唯一方法是继承 您从类派生并重写其函数以接收来
  • 退回 10 天后结束的拍卖

    我的 api xml 对于从当前到 10 天结束的返回拍卖工作正常 但对于 10 天后结束的列表不起作用 这是我下载结果的方式 public string DownLoad string url used to build entire i
  • Unity3D 不安全代码需要指定“unsafe”命令行选项

    我在用Unity3D 4 3并打电话给DLL我创造的 当尝试调用它唯一的函数时 这是 void GetModelReferences int nVertices float vertices int nTriangles int trian
  • 如何转换温度传感器得到的值?

    我在ST工作Temperature sensor hts221 我用I2C与传感器的命令通信 我从文档中看到类似以下文字 enter code here Temperature data are expressed as TEMP OUT
  • 如何找到给定数组的所有可能的子集?

    我想在 C 或 C 中提取数组的所有可能子集 然后计算所有子集数组各自元素的总和 以检查其中有多少等于给定数字 我正在寻找的是算法 我确实理解这里的逻辑 但我现在还无法实现这一逻辑 考虑一组S of N元素 以及给定的子集 每个元素要么属于
  • Task.Run 如何受 CPU 内核限制?

    为什么下面的程序只会运行有限数量的阻塞任 务 限制数量似乎是机器上的核心数量 最初 当我写这篇文章时 我希望看到以下内容 作业 1 24 的作业完成输出 2秒的间隙 工作产出 25 48 然而输出是 作业 1 4 的作业完成输出 然后每隔
  • 反应式:尝试了解Subject如何工作

    试图了解如何Subject
  • C:epoll和多线程

    我需要创建专门的 HTTP 服务器 为此我计划使用 epoll sycall 但我想利用多个处理器 核心 但我无法提出架构解决方案 ATM我的想法如下 使用自己的epoll描述符创建多个线程 主线程接受连接并将它们分配给线程epoll 但还
  • 如何在 g++ 中使用不同的 STL

    我想对 g 使用不同的 STL 而不是其默认的 libstdc 做到这一点最简单的方法是什么 我发现 nostdinc 标志禁止 g 查找其 STL 标头 但这只是编译时的事情 它仍然会使 g 链接到它自己的 STL 所以我需要找到一种方法
  • 如何通过点积获得峰值 CPU 性能?

    Problem 我一直在研究 HPC 特别是使用矩阵乘法作为我的项目 请参阅我的个人资料中的其他帖子 我在这些方面取得了不错的成绩 但还不够好 我退后一步 看看我在点积计算方面能做得如何 点积与矩阵乘法 点积更简单 并且允许我测试 HPC
  • C++ 多重继承关闭同名运算符

    是否可以从两个不同的抽象类继承仅返回类型不同的同名运算符 如果是这样 他们 实现运算符的语法是什么 使用 解析运算符的语法是什么 与任何其他虚函数相同 一般情况下的开销是多少 如果您可以向我提供参考或示例代码 将会有所帮助 thanks 1
  • 关闭/清理“混合”文件描述符/套接字

    当我使用accept 创建一个套接字并使用fdopen 从中创建一个文件时 我需要做什么来清理所有内容 我是否需要对 FILE 执行 fclose 对套接字执行 shutdown 和 close 还是只需要 shutdown 和 或 clo
  • valgrind 错误“大小 4 的读取无效”[重复]

    这个问题已经存在了 这是我的程序 int fun1 void int n 9 int pf n cout lt lt pf lt
  • GNU Make “Abort trap: 6” 在 gcc 调用之后,但是单独执行时调用是有效的

    我正在使用 GNU Make 构建一个很多人都会使用的 C C 项目 makefile 尝试通用 因为该项目中有许多可选文件 每个用户通过 MATLAB 界面选择这些文件 然后通过命令行参数 make target OPTS XYZ 等 将
  • x86-64 上这个语句有什么问题?

    该函数的目的是获取堆栈的起始地址 unsigned long find start void asm movq rsp eax 当我编译它时 出现错误 Error suffix or operands invalid for movq mo
  • Sonarqube C# 扫描仪异常:“java.lang.IllegalArgumentException:不是指针的有效行偏移量”

    有谁知道这是怎么回事 在Windows服务器上使用Sonarqube v5 6 c 扫描仪v5 5 0 479 似乎是在多个文件中发现这一点 而不总是相同的文件 这是最令人担忧的 有人有主意吗 16 46 03 INFO Importing
  • 为 Visual Studio 安装 openCV 2.4 for C/C++

    我一整天都在尝试在 Windows 7 上的 C C 上安装 Visual Studio 2010 的 OpenCV 版本 2 4 1 和 2 4 2 我一直在关注这个教程 http docs opencv org trunk doc tu
  • C 中的 NULL 是否需要/定义为零?

    在我的 GCC 测试程序中 NULL 似乎为零 但维基百科说NULL只需要指向不可寻址的内存 有编译器做吗NULL非零 我很好奇是否if ptr NULL 是比更好的练习if ptr NULL is guaranteed to be zer
  • 在 C++ 中是否有一种简单的方法可以将由空格字符分隔的一行输入拆分为整数?

    我是一名 C 初学者 我一直在开发一个项目 在该项目中 您必须输入一些用空格分隔的整数 并且程序必须输出所有可能的整数排列 我知道在 python 中 这可以使用 int item for item in input split 但我不知道
  • 类和结构在填充和继承方面的区别

    以下所有操作都将在 GCC 9 1 上使用编译器资源管理器 https github com mattgodbolt compiler explorer 在 x86 64 中 使用 O3 我有这个代码 struct Base Base do

随机推荐

  • 对每个请求执行代码

    我希望能够对每个将数据填充到 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 中的函数初始