我注意到一些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