[問題] __fastcall / inline
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
vc2008
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
http://www.codeproject.com/KB/cpp/Sqrt_Prec_VS_Speed.aspx
for sqrt14 (__asm)
問題(Question):
我於 codeproject 找了一份 sqrt 14 種算法 (其實是要加速)
在 vc2008 下, .cpp 是可以過, 若為 .c 會出現錯誤結果,
Q1 :
另其中 __declspec (naked) __fastcall
這二個是幹嘛的我看了 document 還是看得很花,
把這二個關鍵字拿掉 .cpp 還是可以正常執行, 看起來似乎不影響結果。
錯誤結果(Wrong Output):
副檔名 .cpp 正確無誤
副檔名 .c 出現以下錯誤結果
error C2054: 在 'inline' 之後必須有 '('
error C2085: 'sqrt14' : 不在型式參數清單中
error C2143: 語法錯誤 : 遺漏 ';' (在 '{' 之前)
warning C4013: 'sqrt14' 未定義; 假設 extern 傳回整數
程式碼(Code):(請善用置底文網頁, 記得排版)
double inline __declspec (naked) __fastcall sqrt14(double n)
{
_asm fld qword ptr [esp+4]
_asm fsqrt
_asm ret 8
}
int main()
{
sqrt14(2.0);
return 0;
}
補充說明(Supplement):
Q2 :
手邊全都用 C 語言開發,日前是為養成良好習慣且方便移植,所以還是用 .c
但發現 VC 對於 .c 支援實在是差到一種程度!
若日後將所有 .c 全都改成 .cpp (仍是以 C 開發),
試問此舉是否為埋下地雷之作法?
問題有些長,謝謝各位細心看完,非常感激!
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.73.222
推
04/29 16:58, , 1F
04/29 16:58, 1F
→
04/29 16:59, , 2F
04/29 16:59, 2F
→
04/29 17:17, , 3F
04/29 17:17, 3F
→
04/29 17:17, , 4F
04/29 17:17, 4F
→
04/29 17:18, , 5F
04/29 17:18, 5F
推
04/29 17:31, , 6F
04/29 17:31, 6F
→
04/29 17:32, , 7F
04/29 17:32, 7F
→
04/29 17:33, , 8F
04/29 17:33, 8F
→
04/29 17:33, , 9F
04/29 17:33, 9F
→
04/29 17:34, , 10F
04/29 17:34, 10F
→
04/29 17:35, , 11F
04/29 17:35, 11F
→
04/29 17:35, , 12F
04/29 17:35, 12F
→
04/29 17:47, , 13F
04/29 17:47, 13F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章