《C语言编程魔法书:基于C11标准》——3.2 macOS系统下搭建C语言编程环境

简介:

本节书摘来自华章计算机《C语言编程魔法书:基于C11标准》一书中的第3章,第3.2节,作者 陈轶,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 macOS系统下搭建C语言编程环境

macOS系统也不默认自带C语言编译器。然而,用户可以自己去Mac App Store免费下载macOS下的强大开发工具——Xcode:https://itunes.apple.com/cn/app/xcode/id497799835?mt=12 。该集成开发工具采用Apple定制版本的Clang编译器,称为Apple LLVM编译器。它自带C、C++、Objective-C以及Apple自己新推出的Swift编程语言编译器,还有一系列功能强大的代码静态分析以及性能剖析工具。

下载完Xcode之后,把它打开。如果是第一次启动,Xcode会自动更新一些资源,完了之后弹出主界面,如图3-25所示。

我们选择第二个选项,点击它即可创建应用程序工程。第一个选项仅用于操练把玩Swift编程语言,而第二个选项用于创建真正的应用或库。当然,有些应用可直接提交到App Store审核,有些则不行。

点击“Create a new Xcode project”之后,出现图3-26所示的对话框。在图3-26中,我们看到在上面一栏中所选的项目工程为macOS的应用。然后在下边,我们选择“Command Line Tool”,即命令行工具。最左边的Cocoa Application用于创建macOS系统上基于GUI以及沙盒机制的应用,它可以上传到Mac App Store。中间的“Game”专门用于游戏应用,也可上传到Mac App Store。而最右边的“Command Line Tool”构建出来的应用则无法上传到Mac App Store,但是它能访问macOS的整个文件系统,并且没有采用沙盒机制。另外,开发者用Command Line Tool开发出来的应用也可以直接放到网上供其他人下载使用。

image

image

我们点击“Next”按钮之后出现如图3-27所示的对话框。在第1行用英文输入自己的产品名称,这个后面将用于自动生成的工程名称。然后第2行填写组织名。第3行填写组织标识,格式为com.<公司名>.<产品名>。当然,第2、第3行对于我们的demo而言可以随意填写。第5行我们要选择C,表示使用C语言。

image

点击“Next”按钮可看到图3-28所示的目录选择对话框。

image

这里选择将新创建的项目工程放到哪个目录下。另外,这里要注意的是,我们不要勾选“Create Git repository”这一选项。因为它会在工程本地做git版本管理,对于我们一般应用而言没有任何必要,而且这会随着工程构建的次数增多而增大,很占磁盘空间。而且如果要将本地工程拷贝到其他环境,也会带来许多不便。我们最后点击“Create”按钮之后,工程就会被创建好。

工程被创建完之后,Xcode默认会打开,包括会自动创建一个main.c的C语言源文件。此时,我们不用着急编辑、运行,可以先设置一下编译选项。

我们首先点击蓝色的“CDemo”项目工程图标,然后点击中间一栏“TARGETS”下的“CDemo”控制台图标,最后在右边栏的最上方选中“Build Settings”,然后在下面选中“All”和“Combined”。随后,我们找到“Apple LLVM x.x-Language”这一栏,将“C Language Dialect”选为gnu11,这个选项将贯穿本书内容。到此,我们的C语言编译选项就设定好了,如图3-29所示。

image

如果我们想对最终生成的代码再做一些优化,可以设置图3-30中的一些选项。

image

我们将C++的异常以及运行时类型(RTTI)全都关闭,另外也将Objective-C的异常关闭。这样,最终的应用程序中将不会包含异常栈,同时,编译器后端优化也能更省力不少。大家可以观察到,将这几个选项关闭后,最终生成的可执行文件会比开启时要小一些。

最后,我们可以设置一下Xcode自身的偏好设置,将行号显示出来,如图3-31所示。

image

我们在菜单栏上,选择“Xcode”,然后点击“Pre-ferences...”,弹出图3-32所示的对话框。我们把“Line numbers”勾选上即可在文本编辑框中看到行号。另外,Xcode默认字符编码已经是UTF-8了,因此不需要我们做额外的设置。

image

由于Xcode默认字体可能会显得比较小,因此如果想设置字体以及背景颜色的话可以选择“Fonts & Colors”选项。

在进入到此对话框后,我们点击左侧栏下边的“+”号,添加一个新的字体,并且选择“Duplicate‘Default’”,如图3-33所示。这使得我们所新增的字体以默认字体和颜色作为基准,然后对它做大小修改。

image

如图3-34所示,我们这里新增了一个叫“Defualt_Big”的字体,然后在中间这栏,我们先选中“Plain Text”,然后将滚动条滚动到最下方,按住Shift键再选中最后一条“Other Preprocessor Macros”,这样可以将所有种类的文字格式全都选中,随后我们点击“T”字样的按钮来调整这些文字格式的字体大小。这里,原先的字体大小为“Menlo Regular-11.0”,设置之后这里变为“Menlo Regular-14.0”。

image

现在,我们就可以直接运行Xcode自动帮我们生成好的main.c中的C源代码了。我们直接点击右上角的三角箭头按钮即可编译并运行这段代码,如图3-35所示。

image

我们在下面的调试控制台中能看到图3-35这两行文字。其中,最后一句是应用退出后系统自动打印的。我们可以看到,macOS下能非常轻松地直接输出中文,而不需要各种复杂的编码转换。

image

相关文章
|
11月前
|
Dart 开发工具 Android开发
在macOS系统上配置Flutter环境的步骤
在macOS系统上配置Flutter环境的步骤
1496 159
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
1510 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
621 12
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
470 0
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
665 8
|
C语言 开发者
C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧
本文深入探讨了C语言中的模块化编程思想,介绍了模块化编程的概念、实现方式及其优势,强调了合理划分模块、明确接口、保持独立性和内聚性的实践技巧,并通过案例分析展示了其应用,展望了未来的发展趋势,旨在帮助读者提升程序质量和开发效率。
789 5
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
467 4
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
450 1
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
726 1
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
793 23

热门文章

最新文章