编码、搜索路径、#progma指令

news2024/10/9 12:34:34

编码

大家都遇到过乱码,本质在于默认和使用的字符集不同,用不同的编码在交流。尽管Unicode是世界标准,但它在某些场合未必是最优的编码,不一定会采用。

编码举例

比如python.py:
s = '你好'
$ hexdump -c python.py
0000000 s = ' 344 275 240 345 245 275 ' \r \n

每个中文是3个字节,是UTF-8编码。

源代码的编码

  • VS2019: C语言代码开头默认插入EF BB BF标志(BOM标志), 代表UTF-8编码。如果修改为Unicode Little Endian编码保存,代码开头会被插入FF FE.

  • Javac提供-encoding编译选项指定代码编码。

  • HTML提供charset属性指定编码格式。

乱码的本质

  • 以Python为例:从源代码角度,程序员写完之后保存编码格式A,放到Python解释器运行,它按编码格式B解析,最终输出的结果也可能在命令行窗口展示,它使用编码C. 只有A/B/C都适配,结果才是预期。

BOM标记

  • 为了更清晰标明字符编码,引入了BOM ( Byte-Order Mark). BOM的设计高明之处在于它将字符编码信息放在文件开头,而非文件之外,强制要求对字符编码的判断。注意,BOM只对UTF-16和UTF-8有效,对其他编码是无效的。

搜索路径

不同路径存在相同的头文件,头文件搜索也有自己的规则。库文件同样有类似搜索路径问题。

GCC头文件

GCC编译C代码,根据是""或<>方式不同,头文件路径搜索顺序有差异。

  • ""
    • 被编译的源代码文件所在当前目录
    • -iquote指定的路径(只用于引号括起来头文件,如多个路径,从左到右依次搜索)
    • -I指定的路径(如多个路径,从左到右依次搜索)
    • -isystem指定的路径(如多个路径,从左到右依次搜索)
    • 标准系统头文件路径
    • -idirafter指定的路径(如多个路径,从左到右依次搜索)

  • <>
    • -I指定的路径(如多个路径,从左到右依次搜索)
    • -isystem指定的路径(如多个路径,从左到右依次搜索)
    • 标准系统头文件路径
    • -idirafter指定的路径(如多个路径,从左到右依次搜索)

有兴趣的可以写多个不同路径的相同名称头文件,用""或<>测试上面的顺序,可以一一验证。比较有趣的是,即使是系统头文件<stdio.h>, 也可以改成"stdio.h", 这样就遵循上面""的搜索顺序,可以达到覆盖系统头文件的效果。

GCC库文件

库文件不像头文件那样有这么多分类:

  • -L参数

  • LIBRARY_PATH或LD_LIBRARY_PATH

  • /etc/ld.so.conf路径

  • 系统默认的库路径(如/lib, /usr/lib等)。

#pragma指令

pragma是编译器特殊指令,随编译器不同,可实现个性化处理。它和命令行编译选项不同之处在于,它支持更精细控制某个函数或者某个类。


若文章对您有帮助,欢迎关注。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

labview和QT编程

Labview LabView所面向的并非传统意义上的程序员。他的所有功能都可以通过组合某些组件来完成。程序的流程控制&#xff0c;【www.zhugedz.com】比如循环之类的也是通过画图一样的操作来做的。 所有的程序功能几乎都可以通过鼠标来构造出来。优点是做一个能运行的程序非常简单…

有关环境变量的一些话题-----环境变量的分类

配置环境变量的文件&#xff1a; 环境变量的分类&#xff1a; 环境变量加载顺序 一般添加系统环境变量&#xff0c;修改/etc/profile文件&#xff0c;如果操作失误&#xff0c;删除重要配置&#xff0c;影响系统运行。 centos7版本中 /etc/profile 默认扫描路径 /etc/profile.…

微信小程序处理交易投诉管理,支持多小程序,一键授权模式

大家好&#xff0c;我是小悟 1、问题背景 玩过微信小程序生态的&#xff0c;或许就有这种感受&#xff0c;如果收到投诉单&#xff0c;不会及时通知到手机端&#xff0c;而是每天早上10:00向小程序的管理员及运营者推送通知。通知内容为截至前一天24时该小程序账号内待处理的交…

188页企业数字化转型建设方案(数据中台、业务中台、AI中台)

建设背景 随着信息技术的不断进步&#xff0c;企业面临着前所未有的机遇与挑战。数字化转型不仅是技术层面的革新&#xff0c;更是企业运营模式和思维方式的深刻变革。通过数字化转型&#xff0c;企业可以实现资源的最优配置、业务的精准量化以及管理的智能化&#xff0c;从而…

服装生产管理:SpringBoot框架的高效实现

3 系统分析 3.1 可行性分析 可行性分析是该平台系统进行投入开发的基础第一步&#xff0c;必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用&#xff0c;更具有性价比和降低成本&#xff0c;同时也是系统平台的成功的未雨绸缪的一步。 3.1.1 技术可行性 技术…

【网易buff】无法登录steam,显示创建账号,无法解决

手机速度大提升&#xff01;浏览器内核WebView升级指南 WebViewUpgrade 心血来潮想通过网易buff花钱快乐一下&#xff0c;结果发现这app有问题&#xff0c;是因为webview版本问题&#xff0c;这开发真傻逼啊 发现经过 在buff重新登陆Steam的时候&#xff0c;页面只有创建账号…

服装生产管理:SpringBoot框架的创新设计

4 系统设计 4.1 系统结构设计 在结构设计过程中&#xff0c;首先对系统进行需求分析&#xff0c;然后进行系统初步设计&#xff0c;将系统功能模块细化&#xff0c;具体分析每一个功能模块具体应该首先哪些功能&#xff0c;最后将各个模块进行整合&#xff0c;实现系统结构的…

基于SSM的学生社团管理系统—计算机毕业设计源码37391

目 录 摘要 1 绪论 1.1研究背景 1.2研究目的和意义 1.3系统开发技术的特色 1.4 ssm框架介绍 1.5论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据流程 2.3.2业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能…

Authentication Lab | User Agent Strings

关注这个靶场的其它相关笔记&#xff1a;Authentication Lab —— 靶场笔记合集-CSDN博客 0x01&#xff1a;User Agent Strings 前情提要 在某些特殊的场景中&#xff0c;服务端会假定客户端可以信任&#xff0c;并根据客户端告知它的内容做出身份验证的决策。 然而&#xff…

Android开发banner效果

Android开发banner效果 banner在每个app都会有的 一、思路&#xff1a; 用viewpager也可以做。但我是引进第三方库的 二、效果图&#xff1a; 三、关键代码&#xff1a; // 联系&#xff1a;893151960 public class MainActivity extends AppCompatActivity {private Bann…

【MATLAB代码】基于RSSI原理的蓝牙定位程序(N个锚点、三维空间),源代码可直接复制

文章目录 介绍主要功能技术细节适用场景程序结构运行截图源代码详细教程:基于RSSI的蓝牙定位程序1. 准备工作2. 代码结构2.1 清理工作环境2.2 定义参数2.3 生成锚点坐标2.4 定义信号强度与距离的关系2.5 模拟未知点的位置2.6 定位函数2.7 绘图2.8 输出结果2.9 定义定位函数3. …

RDD的介绍、RDD的特点、创建RDD数据

文章目录 1. RDD介绍1.1 Spark开发方式1.1.1 交互式开发1.1.2 脚本式开发 1.2 Spark支持的开发语言1.3 RDD介绍 2. RDD特性3. 创建RDD数据3.1 Python数据转化为RDD3.2 文件数据HDFS转化为RDD3.3 RDD分区3.4 小文件数据读取 1. RDD介绍 1.1 Spark开发方式 1.1.1 交互式开发 通…

【LeetCode】动态规划—712. 两个字符串的最小ASCII删除和(附完整Python/C++代码)

动态规划—712. 两个字符串的最小ASCII删除和 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化5. 小总结 代码实现PythonPython3代码实现Python 代码解释 CC代码实现C 代码解释 总结: 前言 在字符串处…

【已解决】endnote只显示十条文献/licence失效/this license has been suspended

问题&#xff1a;打开endnote后弹窗显示 Were sorry,this license has been suspended due to ...... 关闭弹窗发现只剩10条文献显示了 解决方法&#xff1a; ①关闭杀毒软件 ②找到endnote源文件夹下的License.dat文件&#xff08;找不到的话直接在“此电脑”中搜索&#x…

倒计时3天!飞凌嵌入式邀您共聚第90届CMEF

10月12日~15日&#xff0c;第90届中国国际医疗器械博览会(CMEF)即将在深圳国际会展中心(宝安)隆重举行&#xff0c;4000品牌企业将携数万款产品集中亮相&#xff0c;为全球健康产业带来探析前沿、洞见未来的医疗盛宴。 飞凌嵌入式作为业界领先的嵌入式解决方案提供商&#xff…

七、InnoDB数据存储结构

文章目录 1. 数据库的存储结构:页1.1 磁盘与内存交互基本单位:页1.2 页结构概述1.3 页的大小1.4 页的上层结构2. 页的内部结构2.1 第1部分:File Header(文件头部)和 File Trailer(文件尾部)2.1.1 File Header(文件头部)2.1.2 File tRAILER(文件尾部)2.2 第2部分:Fr…

电商价格监测的创新之路

在当今数字化高速发展的时代&#xff0c;电商如汹涌的浪潮席卷了商业的每一个角落。品牌们在这片广阔的电商海洋中奋力前行&#xff0c;而价格监测则成为了他们手中至关重要的罗盘。 力维网络以其专业的价格监测服务&#xff0c;为品牌在电商之海的航行点亮了一盏明灯。然而&a…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十一章 makefile基本语法(下)

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

韦东山老师linux快速入门otg检测不到方案总结

我是如何解决, 第二节, otg 串口检测不到的, 开发手册链接: https://wwyz.lanzoul.com/iF1TA2c21uoh 我首先按照评论区, 老师说的, 根据完全开发手册, 搜索otg, 然后找到老师当时 烧写系统的时候, 利用usb启动, 然后otg链接, 然后 安装了两个驱动, 往后翻, 就可以翻到 然后重…

多系统数据交换与共享技术方案(医疗行业为例,Doc原件)

目录 1 方案概述 1.1 背景 1.2 参考规范 2 需求分析 2.1 交换内容 2.2 功能需求 1) 消息传输 2) 数据整合 3) 服务集成 4) 流程整合 5) 管理功能 3 总体建设方案 3.1 实现思路 3.1.1 交换方案比选 3.1.2 技术优势 3.2 总体架构 3.3 数据交换与共享基本模型 3.…