作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
示例代码(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/
我是一名优秀的程序员,十分优秀!