内置函数,无法定义(C语言)

6

我实现了一个名为abs()的函数。出现了以下错误:

内置函数,无法定义

我做错了什么?我正在使用Visual Studio 2005。

4个回答

5

内在函数,无法定义

在这种情况下,内在 意味着编译器已经有一个名为 abs 的函数的实现,您无法重新定义该函数。

解决方案?将您的函数名称更改为其他名称,例如 snakile_abs

有关 abs 函数的更多信息,请查看 MSDN 文档。


2
问题不在于是否在头文件中。
问题在于内置函数,即编译器自己识别和实现的函数,通常具有优化,这些优化在仅使用C代码时是不可用的,不能定义。

谢谢。你能给个例子吗?你说的“编译器实现自身”是什么意思?如果我需要使用abs()函数怎么办? - snakile
@sna 您的意思是您想使用与标准C库中不同的绝对值函数吗?...只需将其命名为其他名称即可... - Artefacto

0

所有数学函数的名称(请参见math.h)

所有以'f'或'l'为前缀的数学函数名称。

均保留给实现。


0

定义 static int abs(int x) { ... } 应该是合法的,但仅仅使用 int abs(int x) { ... } 是未定义行为,因此编译器可以做出一个合理的事情就是发出错误。


1
一些头文件可能仍然包含 #define abs __builtin_magic_abs 或类似的内容。由于预处理器首先看到文本,因此您最终仍会尝试定义 static int __buildin_magic_abs(int x){...}。由于 abs() 是 C 标准库中定义的名称,尝试按名称替换它可能是不明智的(并且肯定不可移植的)。 - RBerteig
1
只要您不#include任何定义abs的头文件或在定义自己版本之前将其#undef,标准明确允许您将其替换为static函数。然而,替换extern版本是未定义行为。 - R.. GitHub STOP HELPING ICE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接