合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
在上一章节中我们理解了类型占用的空间,还有输出格式,但还是存在一些困惑的地方,这里做一些解释,首先是格式输出(比如使用printf打印),我们必须要解决一个不同位数机器的兼容问题,在我们的Ubuntu Server中可以找到一个目录:~/workspace/basics/c/3\_1\_typedef,该目录里面的源码对应本章内容,如下: ![](https://img.kancloud.cn/b4/9a/b49a99f3f616663ef4e3dd0b95d605e3_832x132.png =600x) ### 1.包含标准头文件: ![](https://img.kancloud.cn/9f/a0/9fa01aa7878030d4f58d6f4e425f44c6_506x270.png =300x) >[info] 说明:定义\_\_cplusplus说明是c++的编译器进行编译,c++原生支持bool类型,因此可以忽略该头文件,不然会有编译告警。 2.定义变量: ![](https://img.kancloud.cn/d0/cf/d0cfb8ae6cd650973d3a603a1f30fbba_718x438.png =600x) ### 3.printf格式化输出: ![](https://img.kancloud.cn/5f/68/5f68ee619e253ea7c2b5ecac0b437110_832x596.png =600x) >[info] 说明: > #if defined(**x86\_64**) || defined(**aarch64**) || defined(**arm64**) > 这段宏定义是在区分代码是在64位机器上还是32位机器,不同位数的打印输出是不一样的,我们的Ubuntu Server是64位机器的;如果没有这段宏,代码会出莫名其妙的运行时问题,而且是令人百思不得其解的现象。 ### 4.编译及运行: 注意,嵌入式的开发过程不要使用微软的工具(比如VS)来编译或者运行,不然你的代码会有一堆冗余的代码去将就WIN32和微软编译内核版本的问题,比如上述例子中的bool类型,如果使用旧的微软编译器(低于Visual Studio 2013的版本),一定会出现编译不通过的问题,而我们需要做一个修改来将就这个编译内核的问题: ![](https://img.kancloud.cn/c0/3f/c03f23cb7fa2365b0cc525242eac8a16_744x372.png) ### 这种兼容在嵌入式开发是绝对的败笔,除非你的软件是开源软件,需要考虑各方的使用,如果是企业产品的开发,不建议使用微软的编译工具。 ### 目前我们暂不考虑编译到开发板上运行,先通过gcc来编译测试: ![](https://img.kancloud.cn/04/1d/041d0c74aac741220186a2ac140ac53b_832x484.png) ### 这段代码可以在任何基于Linux平台(包括安卓)中被无缝移植,而且编译无任何警告和错误,运行也不会出现奇怪的问题。 ### 这种格式化也经常被用来通过sprintf把数值格式化为字符串,比如: ![](https://img.kancloud.cn/19/ad/19ade3fcee4044eb111b2a9d46ab3d71_704x112.png)