2010-08-24 42 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