不同标头中具有相同名称的静态和多个函数

问题描述 投票:0回答:1

我有两个头文件,它们定义了两个具有相同名称和不同参数的函数。我知道c不支持函数重载,但我认为在函数声明中添加static会允许我声明两个具有相同名称的函数,并且我只能在同一个源文件中访问它们。无论如何它不起作用,我不知道为什么不呢?我的理解错了吗?

示例:file1.h具有以下功能:

static bool do_something(int a);

file2.h具有以下功能:

static bool do_something(char b);

main.cpp包含两个标头:

#include "file1.h"
#include "file2.h"

示例错误:

file1.h:26:13: error: conflicting types for ‘do_something’
static bool do_something(int a);

file2.h:23:13: note: previous declaration of ‘do_something’ was here
 static bool do_something(char b);

提前致谢。

c
1个回答
1
投票

bool do_something(int a);是原型。它告诉编译器函数do_something需要int类型的参数并返回类型为bool的值。

当您调用此函数时,编译器现在可以检查您是否传递了正确的参数,并将返回值分配给正确类型的变量。

由于C没有函数重载,您将理解在任何一个编译单元中只能有一个函数定义。编译单元是包含所有.h文件的.c源文件。

因此,以上描述对任何情况的链接都没有影响。如果未调用该函数,则不需要原型;如果有原型,则不需要该功能存在。如果调用该函数,它可能存在于链接到可执行文件的任何源文件或库中。

函数定义的关键字static表示该函数只对编译单元中的其他函数可见(因此必须存在于编译单元的源代码中)。在.h文件中包含static关键字是没有意义的,因为它将告诉包含.h文件的每个源文件,如果使用该函数,则存在于该源文件中。

该描述确实对链接过程有影响,因为如果使用该函数,它必须存在于当前源文件中。

在您的情况下,您必须确定两个原型中的哪一个是正确的并相应地修复.h文件 - 或者声明另一个不同的函数,该函数采用另一个参数,例如: qazxsw poi。

© www.soinside.com 2019 - 2024. All rights reserved.