我注意到一些Objective-C項目中一些使用大量C函數的文件,將代碼存儲在.c
文件中而不是.m
。我知道.m
是針對Objective-C的,而.c
是針對C的,但在使用.c
時可以使用.m
嗎?是否有性能增加或併發症的好處? GCC或clang會在每個代碼中編譯相同的代碼嗎?.c文件而不是.m文件?
回答
主要好處是.c文件可以在正常的C程序中按原樣使用,並且您知道它們不會意外地合併使它們不兼容的Objective-C構造。
是的,Xcode會用'C'編譯器編譯.c文件,用'Objective-C'編譯器編譯.m文件。這是相同的編譯器二進制文件,只是使用不同的語言選項。既然如此,我不希望相對的表現會太差。
所以你不會指望他們之間有太大的區別? – 2010-12-20 02:45:16
我不希望有太大的區別。 – ldav1s 2010-12-20 23:01:13
除此之外,.c對跨平臺開發非常有用。將它從一個平臺移植到另一個平臺的開銷非常低或幾乎可以忽略不計。 。大多數情況下,應用程序的後端或模型是使用「C」開發的,其中性能是必需的,您需要與機器直接交互。比如與硬件和東西的交互。
我不問C代碼,當我詢問大部分項目是否爲objective-c時,不會將C代碼放在.m文件中。 – 2013-08-04 17:14:46
- 1. 文件安裝到C:\而不是C:\文件夾\
- 2. 「創建NSManagedObject子類」創建.h和.m而不是.swift文件
- 3. 如何讓Xcode首先打開.h而不是.m文件?
- 4. 是否可以將C文件編譯爲.app文件而不是.exe文件?
- 5. C++ wstring文件,而不是字符串
- 6. C:包括源文件,而不是頭
- 7. 從.m文件
- 8. Project.properties文件而不是default.properties文件
- 9. asp.net c#瀏覽到文件夾,而不是文件
- 10. .m文件中的C函數比.c文件中的慢嗎?
- 11. 文件包含頭文件而不是文件名可能在C?
- 12. NSObject而不是頭文件
- 13. m解析文本文件
- 14. 導入.m文件
- 15. 如何.m文件
- 16. 寫入.m文件
- 17. 刪除文件的文件夾,而不是文件夾
- 18. 僅列出文件夾文件而不是文件
- 19. 目標c - .m和.a文件?
- 20. 在c中計算Matlab .m文件#
- 21. 爲什麼在Mailcore2示例'MCOMessageView'文件是一個C++文件而不是目標c文件?
- 22. 在.m文件中構造頭文件?
- 23. MATLAB .m文件到mex文件轉換
- 24. 從C中的文本文件中刪除控件M
- 25. 如何將m文件轉換爲c文件
- 26. Github將Matlab .m文件誤分類爲Objective-C文件
- 27. 如何在.m文件中調用C++文件的函數?
- 28. Python文本文件而不是字典
- 29. 從一個m文件傳遞句柄到其他m文件
- 30. MATLAB:從另一個M文件調用M文件
所以你會期望兩個編譯之間有很大的區別? – 2010-12-20 04:01:49
@Justin Meiners:不,我不會。我從來沒有注意到或聽說編譯爲Objective-C或C99之間有很大的區別。 AFAIK,GCC和Clang中的Objective-C編譯器以與普通C程序相同的方式編譯Objective-C程序的純C部分。請注意,對於Objective-C++來說,情況並非如此 - 針對該編譯器的編譯器有點不同,編譯時間比單獨使用Objective-C或C++的時間要長。 – Chuck 2010-12-20 04:59:33