gpt4 book ai didi

在 C 中调用不同的用户定义函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:42 26 4
gpt4 key购买 nike

抱歉,如果我问这个问题看起来很愚蠢,但我想加强我的理解并消除我对用户定义函数的任何误解。

“案例:”我有两个函数(可以是 void 或 int),我将它们称为 function1 和 function2。我将它们放在一个文件中,该文件将被其他程序调用。我将 function1 作为在另一个程序中调用的 void 函数,并将一直被调用直到程序结束(function1 运行时 function2 不会运行)。

Function2 必须由另一个程序(不是 function1 的同一个程序)调用 function2 执行(在这种情况下 function1 不能运行)。 Function2 可以是 int 或 void 函数。

我知道标准程序会将它们按顺序放入我的 main 函数中,因为该程序只会调用 main。 main 将按照放置的函数的顺序运行(例如 function1 将首先运行然后 function2)

例如

#include<stdio.h>
#include<stdlib.h>

void function1(....)
int function2(...)

void function1(intA,intB,struct.....)
{
...Conditions, loops, whatever
}


int function2()
{
..........
return(some value)
}

在这部分,我会将 main 放在底部

int main(int argc, char *argv[]) 
{
function1();
int A;

A = function2();
....
}

我认为我会在 main 中使用 if else 条件来使“案例:”成为可能。

此示例代码是否会完全按照我在顶部 Case: 下提到的那样运行(带有 if else 条件)?如果没有,我有什么困惑? c 中的示例代码对于清晰的解释也很有帮助。

请告诉我我的解释或问题是否有混淆之处。我会尽量说清楚。

最佳答案

如果您只想调用一个函数,请使用通过 argv/argc 获得的命令行参数。

int main(int argc, char *argv[])
{
if (argc != 2) return -1; // zero or 2+ commandline arguments

if (0 == strcmp(argv[1], "function1"))
function1();
else if (0 == strcmp(argv[1], "function2"))
function2();
else { return -1; /* error */ }

return 0;
}

幕后发生了什么(在调用 main() 之前),部分列表:

  • 操作系统创建新进程并执行它的入口点地址(不是 main())。
  • 入口点函数以某种依赖于操作系统的方式从操作系统接收所有命令行参数。
  • 调用各种 C std 库来初始化框架。
  • 环境变量被复制到标准 C 库结构中。
  • 相关 DLL 已加载。
  • 全局变量已初始化。
  • 创建了一个 char* 数组 (argv)。每个数组条目都指向一个 C 字符串。第一个 (argv[0]) 始终是 exe 名称。如果 OS/shell 传递了命令行参数,它们将被复制到 argv[1]、argv[2] 等。
  • main(int, char**) 用 argv 和 argc 调用。

所有这些工作都是为了从程序中抽象出操作系统。上面的流程在很大程度上依赖于操作系统,大多数开发人员都不感兴趣。如果您是(非常)高级的 C 程序员,或者如果您对这个流程感兴趣,那么您可以自己阅读。

main() 原型(prototype)由 C 标准定义。实际上有几种合法的原型(prototype)可供选择。编译器/链接器将选择您实现的内容。

关于在 C 中调用不同的用户定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20312157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com