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

时间:2013-12-01 12:36:36

标签: c user-defined-functions

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

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

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

我知道标准程序会将它们放在我的主函数中,因为这个程序只会调用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)
} 

在这部分中,我将主要在底部

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

A = function2();
....
}

我认为我会使用if中的else条件来使“Case:”成为可能。

这个示例代码是否会像我在Case中的顶部提到的那样运行:(使用if else条件)?如果没有,我有什么困惑? c中的示例代码也非常有用,并且有明确的解释。

请告诉我,我的解释或问题是否有些混淆。我会尽力说清楚。

1 个答案:

答案 0 :(得分:1)

如果只想调用一个函数,请使用通过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()之前),部分列表:

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

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

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