我实现了一个名为abs()的函数。我得到这个错误:固有函数,无法定义(C)
Intrinsic function, cannot be defined
我做了什么错了? 我正在使用Visual Studio 2005.
我实现了一个名为abs()的函数。我得到这个错误:固有函数,无法定义(C)
Intrinsic function, cannot be defined
我做了什么错了? 我正在使用Visual Studio 2005.
问题不在头文件中。
问题在于内部函数,即编译器自己识别和实现的函数,通常只有C代码中无法提供的优化,无法定义。
的所有数学函数的名称(参照文件math.h)
的由“f”或“L”前缀的数学函数的名称。
保留用于执行。
定义static int abs(int x) { ... }
应该是合法的,但只是int abs(int x) { ... }
有未定义的行为,因此编译可以做的一件合理事情是发出错误。
某些标题可能仍然有'#define abs __builtin_magic_abs'或其他。由于预处理器首先看到文本,因此最终还是试图定义'static int __buildin_magic_abs(int x){...}'。由于abs()是C标准库中定义的名称,因此试图用名称替换它可能是不明智的(当然也不可移植)。 – RBerteig 2010-08-25 00:01:58
只要您在定义自己的版本之前不包含定义'abs'或'#undef'的任何头文件,Standard就明确允许您用'static'函数替换它。但是,替换'extern'版本是未定义的行为。 – 2010-08-25 02:36:00
谢谢。你能举个例子吗? “编译器...实现自己”是什么意思?如果我需要使用该abs()函数呢? – snakile 2010-08-24 14:25:33
@sna'#include' –
Artefacto
2010-08-24 14:33:44
I include。仍然不起作用 –
snakile
2010-08-24 14:39:32