如何在C语言中执行函数重载

548 阅读3分钟

函数重载是一个非常著名的概念,在面向对象的语言中,一个代码中有许多名称相同、参数不同的函数。支持函数重载的面向对象编程语言包括Java和C++。由于C语言的编译器不允许在代码中使用它,因此在C语言中实现函数重载并不容易,然而,我们仍然可以通过一些技术实现同样的事情。让我们从打开Ubuntu 20.04 LTS的shell终端开始这篇文章。

前提条件

  • 安装Ubuntu 20.04 LTS
  • 安装GCC编译器
  • 获得sudo权限

例子01:C语言中的函数重载

让我们开始我们的第一个例子,看看函数重载在C语言中是如何失败的。我们必须利用终端外壳中的 "touch "指令来创建一个新的C型文件。为了打开这个新文件,你需要一个文件编辑器。我们一直在利用 "GNU Nano "编辑器来打开它。

执行下面的粘贴指令就可以开始了。

$ touch test.c

$ nano test.c

在编辑器中启动该文件后,我们已经包括了我们已经定义的两个用户定义的标准输入输出头。在头文件之后,我们定义了两个用户定义的方法,名称相似,参数不同,即 "cal"。第一个用户定义的方法,"cal "需要一个整数类型的参数,而另一个 "cal "方法需要两个整数类型的参数。第一个函数一直在简单地将传递的整数值与自身相乘,并将其保存到另一个刚刚被初始化的整数型变量 "t "中。

之后,计算出的值将通过其中的 "printf "语句显示在shell中。另一个函数在其参数中接收两个整数值,并使用传递的值通过乘以两个整数来计算总数。计算出的值将按照 "printf "语句在shell中打印出来。

在main()方法中,我们一直在一个接一个地调用这两个方法。第一个方法被调用时,其中有一个参数性的整数值。在调用另一个同名函数时,它的参数中有两个整数类型的值。主方法在这里被关闭。

保存这段代码并退出文件。使用 "GCC "编译器包来编译这段代码并查看函数重载错误。该命令已在下面的图像输出中给出。你可以看到,由于函数的名称相同,编译这个文件时抛出了很多异常。

执行下面的附加指令。

$ gcc test.c

例02:函数重载的替代方法

在这个例子中,我们将让你了解实现函数重载的替代方法。我们再次打开同一个文件,用#include关键字在文件顶部添加了三个头文件包。我们定义了两个同名的用户定义的函数,其中有一个字符的变化。两个函数的名字都以 "cal "开头。

第一个方法在其参数中接受两个整数类型的值作为参数。而另一个方法在其参数中接受两个字符型指针作为参数。第一个 "cal "方法取这两个整数值并将它们相加。计算出来的值将被返回给主方法。另一方面,另一个 "cal "方法初始化了另一个字符型指针,"z"。

strlen()方法被应用于两个字符串变量以获得长度,malloc()方法已经被应用于length以获得内存大小。指针 "z "已经通过malloc()方法获得了内存,因为它必须存储字符串值。strcpy()方法被用来将指针变量 "x "的字符串值复制到 "z"。而strcat()方法被用来将指针变量 "y "的值附加到 "z "的末尾。更新后的 "z "的值被返回到main()方法中。我们已经用"_Generic "关键字定义了函数声明。

main()方法声明了两个整数变量,将其传递给第一个 "cal() "方法。两个字符指针已被初始化为字符串值并传递给第二个 "cal() "方法。

用 "GCC "包编译了这段代码。在执行这段代码时,我们得到了两个整数和串联的字符串之和。

执行下面的粘贴指令就可以开始了。

$ gcc new.c

$ ./a.out

总结。

本指南包含了在C语言中使用函数重载的另一种方法的说明。我们通过这个例子来了解函数重载在C语言中是如何失败的,以及_Generic术语如何拯救我们。如果你仔细阅读了本指南,那么从现在开始你就可以轻松地在C语言中执行函数重载了。我们希望你会发现这篇文章是最好的。