**:
「function」: 函式編譯為本機**: 「reason」
即便已指定 /clr 編譯器選項,編譯器也無法將function編譯為託管**。
相反,編譯器將發出警告 c4793 和說明性的連續訊息,然後將function編譯為本機**。
連續訊息包含reason 文字,解釋為何不能將function編譯為msil
當指定 /clr:pure 編譯器選項時,這是 1 級警告。
下表列出了所有可能的連續訊息。
原因訊息
備註託管**中不支援對齊資料型別
clr 必須能夠根據需要分配資料,如果資料與 __m128 或 align 等宣告對齊,則 clr 可能無法分配資料。
託管**中不支援使用「__imagebase」的函式
__imagebase是特殊的鏈結器符號,通常僅由低階別的本機**用以載入 dll。
「/clr」編譯器選項不支援 varargs
本機函式不能呼叫具有變數引數列表 (varargs) 的託管函式,因為這些函式有不同的堆疊布局要求。
但是,如果指定 /clr:pure 編譯器選項,則將支援變數引數列表,因為程式集僅包含託管函式。
有關詳細資訊,請參閱純**和可驗證** (c++/cli)。
64 位 clr 不支援用 __ptr32 修飾符宣告的資料
指標的大小必須與當前平台上的本機指標的大小相同。
有關詳細資訊,請參閱__ptr32、__ptr64。
32 位 clr 不支援用 __ptr64 修飾符宣告的資料
指標的大小必須與當前平台上的本機指標的大小相同。
有關詳細資訊,請參閱__ptr32、__ptr64。
託管**中不支援乙個或多個內部函式
內部函式的名稱在訊息發出時不可用。
但是,導致此訊息的內部函式通常表示低階別的機器指令。
託管**中不支援內聯本機程式集(「__asm」)
內聯程式集**可以包含無法託管的任意本機**。
非 __clrcall 虛函式形式轉換(thunk)必須編譯為本機
非 __clrcall 虛函式形式轉換 (thunk) 必須使用非託管位址。
使用「_setjmp」的函式必須編譯為本機
clr 必須能夠控制程式執行。
但是,setjmp 函式通過儲存和還原低級別資訊(如註冊和執行狀態)可忽略常規程式執行。
下面的示例生成 c4793。
// c4793.cpp// compile with: /c /clr /w3
// processor: x86
int asmfunc(void)
}
警告 c4793:「f」: 函式編譯為本機**:使用「_setjmp」的函式必須編譯為本機
編譯器警告和錯誤詳解
原文 1.warning 550 d variable d was set but never used 描述 變數 d 定義但從未使用,或者是,雖然這個變數你使用了,但編譯器認為變數d所在的語句沒有意義,編譯器把它優化了.解決 仔細衡量所定義的變數d是否有用,若是認定變數d所在語句有意義,那麼嘗試...
keil MDK編譯器警告和錯誤詳解
1.warning 550 d variable d was set but never used 描述 變數 d 定義但從未使用,或者是,雖然這個變數你使用了,但編譯器認為變數d所在的語句沒有意義,編譯器把它優化了.解決 仔細衡量所定義的變數d是否有用,若是認定變數d所在語句有意義,那麼嘗試用vo...
keil MDK編譯器警告和錯誤詳解
1.warning 550 d variable d was set but never used 描述 變數 d 定義但從未使用,或者是,雖然這個變數你使用了,但編譯器認為變數d所在的語句沒有意義,編譯器把它優化了.解決 仔細衡量所定義的變數d是否有用,若是認定變數d所在語句有意義,那麼嘗試用vo...