2010-08-24 62 views

回答

3

Intrinsic function, cannot be defined

在这种情况下,intrinsic意味着编译器已经有一个名为abs功能,你不能重新定义的实现。

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

请查阅有关abs函数的MSDN文档以获取更多信息。

2

问题不在头文件中。

问题在于内部函数,即编译器自己识别和实现的函数,通常只有C代码中无法提供的优化,无法定义。

+0

谢谢。你能举个例子吗? “编译器...实现自己”是什么意思?如果我需要使用该abs()函数呢? – snakile 2010-08-24 14:25:33

+0

@sna'#include ' – Artefacto 2010-08-24 14:33:44

+0

I include 。仍然不起作用 – snakile 2010-08-24 14:39:32

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 2010-08-25 00:01:58

+1

只要您在定义自己的版本之前不包含定义'abs'或'#undef'的任何头文件,Standard就明确允许您用'static'函数替换它。但是,替换'extern'版本是未定义的行为。 – 2010-08-25 02:36:00