c - 为什么可以在不同的文件中使用与其原型(prototype)不同数量的参数重新定义函数?

标签 c linkage function-prototypes

我有 2 个文件 - main.c 和 main1.c。

主.c:

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

void foo(void)
{
}

int main(void)
{
    foo();
}

main1.c:

void foo(int a, int b);

我使用 gcc 编译:

gcc main.c main1.c -o main

编译没有错误。如果函数原型(prototype)默认具有外部链接,为什么这可能呢? gcc 不应该给我一个错误,说 foo 是用不同数量的参数重新定义的吗? C 标准在哪里描述了这种行为?

最佳答案

嗯,这是因为您在 main1.c 中的 void foo(int a, int b); 只是一个前向 声明。尚未定义任何内容。 如果将 main1.c 更改为:

void foo(int a, int b) {}

您将看到错误。

关于c - 为什么可以在不同的文件中使用与其原型(prototype)不同数量的参数重新定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076718/

相关文章:

c - 在c中分配内存时写入、读取无效

javascript - 构造函数和原型(prototype)方法中的 ES6 super()

c++ - 函数原型(prototype)和函数实现签名不一致地使用 const 可以吗?

c - 修改PID管理器以实现多线程

c - X Window 系统中的一个老缺陷。它是如何工作的?

c++ - 当应用于命名空间范围内的类时,静态意味着什么?

c++ - 在 namespace 中定义并在多个翻译单元中使用的变量的链接

C - 在什么情况下外部声明成为定义?

c - 函数声明与函数定义

c++ - 什么时候将 C++ 函数放在头文件中