我實現了一個名爲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