gpt4 book ai didi

c - 海湾合作委员会/ clang : error: conflicting types for : why function name matters?

转载 作者:行者123 更新时间:2023-12-02 16:05:07 25 4
gpt4 key购买 nike

示例代码(t987.c):

void *NAME();
void *NAME(void *, int, unsigned);

调用:

$ gcc t987.c -c -DNAME=memset1
<nothing>

$ gcc t987.c -c -DNAME=memset
<command-line>: error: conflicting types for ‘memset’; have ‘void *(void *, int, unsigned int)’
t987.c:2:7: note: in expansion of macro ‘NAME’
2 | void *NAME(void *, int, unsigned);
| ^~~~
<command-line>: note: previous declaration of ‘memset’ with type ‘void *(void *, int, long unsigned int)’
t987.c:1:7: note: in expansion of macro ‘NAME’
1 | void *NAME();

# clang: the same behavior

问题:为什么函数名很重要?

最佳答案

memset1 没有其他定义或声明。所以这两个声明是兼容的:

void *memset1();
void *memset1(void *, int, unsigned);

因为第一个说参数的数量和类型未知。

但这给你带来了一个问题:

void *memset();
void *memset(void *, int, unsigned);

因为 memset 是由 C 标准定义的,因此被认为是实现的一部分,它也被内部声明为:

void *memset(void *, int,  long unsigned int)

这与您的第二个声明冲突。

关于c - 海湾合作委员会/ clang : error: conflicting types for <function_name>: why function name matters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69630462/

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