编程参考
文章平均质量分 77
各种编程相关内容
夜流冰
记录和分享可以记录和分享的一些东西
展开
-
编程参考 - source tree的解释
这种树状结构可以帮助开发人员了解文件和目录是如何随时间演变的,而且由于不同的团队可以在源代码树的不同分支(子目录)上工作,与他人协作也变得更加容易。- 清晰的视觉表现: 就像一棵树有树干和树枝,树干和树枝又分成更小的树枝和树叶,源代码树的根目录包含文件夹和文件,而文件夹和文件又可能包含更多的子目录(树枝)和文件(树叶)。这使得结构更容易可视化。- 在源代码树中,文件代表以各种编程语言(如`.c`、`.cpp`、`.py`、`.java`等)编写的代码,以及相关的配置文件、脚本和资源(如图像或文档)。原创 2024-10-12 10:53:57 · 848 阅读 · 0 评论 -
Python - HTTP servers
选项 -b/--bind 可指定服务器应绑定的特定地址。选项 -p/--protocol 指定了服务器所遵从的 HTTP 版本。python的http.server模块用于HTTP服务器的功能,这个模块是python标准库的一部分,不需要pip install。选项-d/--directory指定了服务器提供文件的目录。3.8 版中更改: 在 --bind 选项中支持 IPv6。3.7 版中更改:添加了 --directory 选项。3.4 版中更改: 添加了 --bind 选项。原创 2024-10-06 22:56:56 · 1219 阅读 · 0 评论 -
Python - Windows下安装pip
4. 单击 “新建 ”并添加 Python 安装路径(例如,“C:\Python39 ”或 “C:\Users\YourUsername\AppData\Local\Programs\Python\Python39\”)。5. 同时添加 `pip` 所在的 `Scripts` 目录的路径(例如,`C:\Users\YourUsername\AppData\Local\Programs\Python\Python39\Scripts\` )。如果安装了 `pip`,此命令将显示已安装的 `pip` 版本。原创 2024-10-06 13:28:23 · 848 阅读 · 0 评论 -
编程参考 - 动态链接库中的变量实例化
如果动态链接库使用线程本地存储(TLS)(例如 GCC 中的 `__thread` 关键字或 C11 中的 `_Thread_local`),那么每个线程都将拥有自己的变量实例。这允许同一进程中的不同线程拥有独立的变量实例。在 C 程序中,调用动态链接库(Linux 上为共享库或 `.so`,Windows 上为 `.dll`)时,变量的处理取决于变量在库中的定义方式和库的加载方式。如果多个进程加载同一个动态链接库,每个进程都会有自己的变量实例,甚至是全局变量或静态变量,因为每个进程都有自己的内存空间。原创 2024-10-02 08:50:35 · 913 阅读 · 0 评论 -
编程参考 - C标准库中的errno定义
ERRNO.H包含errno值的定义。ERRNO.H中的某些值是为了保持与UNIX系列操作系统的兼容性。32 位 Windows 操作系统中的 errno 值是 UNIX 系统中 errno 值的子集。errno 值不一定与 Windows 操作系统的系统调用返回的实际错误代码相同。要访问实际的操作系统错误代码,请使用包含该值的 _doserrno 变量。# define __set_errno(val) (errno = (val)) // GLibc库里面都用这个函数来设置errno。原创 2024-09-26 16:18:11 · 413 阅读 · 0 评论 -
编程参考 - 如何判断errno是否可用
在 `open(2)` man 页面中,您可以找到 “错误 ”部分,其中列出了函数将设置 `errno` 的各种条件,以及可能设置的 `errno` 值(错误代码)(例如 `EACCES`、`EEXIST` 等)。- POSIX 标准: 可能失败的函数通常会设置 `errno`,但 `errno` 只有在函数发出错误信号(例如返回 `-1`)时才有意义。因此,如果函数可能失败,它可以修改 `errno`。- 文件操作(`open`、`read`、`write`、`close`、`stat` 等)。原创 2024-09-26 14:24:31 · 547 阅读 · 0 评论 -
编程参考 - 使用open和fopen的区别
您通常会将它与 `“r”`、`“w”`、`“a”` 等简单模式一起使用。- 返回类型: 返回一个 `FILE*` 指针,其他高级 I/O 函数(如 `fread()`、`fwrite()`、`fprintf()` 等)会使用该指针。- 模式: 支持读取、写入和追加的简单模式,使用的字符包括 `“r”`、`“w”`、`“a”`,以及可选的用于读/写的 `+`。- 模式:`open()` 可以使用 `O_RDONLY`、`O_WRONLY`、`O_RDWR` 等标志以多种模式打开文件。原创 2024-09-21 07:55:07 · 914 阅读 · 0 评论 -
编程参考 - C++的default使用
在 C++ 中,= default 用于明确声明特殊成员函数应使用编译器提供的默认实现。* 隐式声明: 显式使用 = default 时,编译器不会隐式声明特殊成员函数。在本例中,类 MyClass 使用 = default 来表示应使用特殊成员函数的默认实现。* 效率:在某些情况下,编译器生成的函数可能比手动编写的函数更有效率。此处声明应使用默认的移动构造函数。此处声明使用默认的移动赋值运算符。声明使用默认的拷贝赋值操作符。声明使用默认的拷贝构造函数。声明应使用默认的析构函数。声明应使用默认构造函数。原创 2024-09-14 09:05:22 · 765 阅读 · 0 评论 -
编程参考 - RAII (Resource Acquisition Is Initialization)介绍
在这种模式中,资源在类的构造函数中获取并初始化,当对象退出作用域时(即在析构函数中),资源会被自动清理。它将资源生命周期与对象生命周期联系在一起,确保资源得到可靠的自动管理,有助于防止资源泄漏并确保异常安全。一些类,比如std::unique_ptr 和std::shared_ptr,可以动态管理内存,确保在指针离开作用域时释放内存。这确保了资源的可靠和自动释放,避免了资源泄漏,如内存泄漏、文件描述符泄漏等。- 释放资源: 当对象退出作用域时,内存会在析构函数中自动去分配(`delete`)。原创 2024-09-14 08:46:38 · 663 阅读 · 0 评论 -
编程参考 - C++中什么时候需要使用move构造函数
这在处理大型对象(如容器(如 `std::vector`、 `std::string`))或资源(如动态内存、文件句柄或网络连接)时尤其有用。- 将大型对象移入或移出容器(例如,`std::vector`, `std::map`)可避免昂贵的复制。- 在编写管理资源的类时,通常需要定义移动构造函数和移动赋值操作符,以便在移动对象时有效地转移资源。- 当对象为临时对象(如函数返回值)时,与其复制对象,不如移动其资源,从而避免昂贵的深度复制。- 复制成本微不足道的小对象或原始类型。- 移动后仍需要对象时。原创 2024-09-14 08:19:30 · 490 阅读 · 0 评论 -
编程参考 - omit-frame-pointer编译选项
我不认为你应该把 “试图让函数不需要框架指针 ”作为编码策略的一部分--就像我说的,简单的函数不需要框架指针,所以使用-fomit-frame-pointer,你就能为寄存器分配器多获得一个可用寄存器,并在函数的进入/退出时节省 1-3 条指令。需要注意的是,“不使用帧指针 ”应该会带来更好的性能,但这并不是什么能带来巨大改进的灵丹妙药,尤其是在 x86-64 上,因为它一开始就已经有 16 个寄存器了。对于调试至关重要的开发构建,通常会保留帧指针。大多数较小的函数不需要帧指针,而较大的函数可能需要。原创 2024-09-09 18:08:25 · 984 阅读 · 0 评论 -
编程参考 - 头文件中使用static inline
通过将这些函数标记为内联,编译器可以将函数体直接替换到调用代码中,避免了函数调用的开销。* static inline 将两者结合在一起,创建了一个对文件私有的函数,并有可能被内联,因此非常适合 Linux 内核等对性能敏感的代码中频繁使用的小型实用程序函数。* 范围限制 + 内联扩展: 函数仅限于定义它的文件(不会与其他文件名冲突),鼓励编译器将其内联,尽可能用函数体代替对函数的调用。* 链接:它赋予函数或变量内部链接,这意味着它是文件的私有部分,不会与其他文件中的同名函数或变量发生冲突。原创 2024-08-17 15:53:16 · 641 阅读 · 0 评论 -
力扣 - 194.转置文件(transpose-file)
注意到是转置,假如原始文本有m行n列(字段),那么转置后的文本应该有n行m列,即原始文本的每个字段都对应新文本的一行。我们可以用数组res来储存新文本,将新文本的每一行存为数组res的一个元素。在END之前我们遍历file.txt的每一行,并做一个判断:在第一行时,每碰到一个字段就将其按顺序放在res数组中;从第二行开始起,每碰到一个字段就将其追加到对应元素的末尾(中间添加一个空格)。NR是正在处理的当前行数。给定一个文件 file.txt,转置它的内容。3,最后运行END后的{Action}中的命令。原创 2024-08-17 15:04:05 · 409 阅读 · 0 评论 -
编程参考 - Rule of Three and the Rule of Five in C++
五条规则: 在 C++11 中增加了移动语义后,如果您定义了析构函数、复制构造函数、复制赋值操作符、移动构造函数或移动赋值操作符中的任何一种,则应定义所有五种。C++ 中的 "三规则 "和 "五规则 "是管理类中资源管理函数(特殊成员函数)的准则。之所以会出现这条规则,是因为如果一个类管理一个资源(如动态内存),编译器提供的这些函数的默认实现可能无法正确处理该资源,从而导致重复删除或资源泄漏等问题。对于管理资源的类来说,移动操作是必要的,因为它可以从临时对象中有效地转移资源,避免不必要的深度拷贝。原创 2024-07-16 08:10:02 · 792 阅读 · 0 评论 -
编程参考 - 在C++移动构造函数声明中使用noexcept
例如,如果移动构造函数是 noexcept 的,std::vector 就可以在重新分配时不会考虑出现异常的风险,从而提高性能。* 临时对象: 临时对象(rvalues)是移动操作的理想候选对象,因为它们即将被销毁,因此其资源可以被 "移动 "而不是复制。std::vector::push_back在处理临时对象时使用移动构造函数,前提是移动构造函数标记为 noexcept。std::vector 可以根据 MyClass 的 noexcept 移动构造函数和移动赋值操作符优化其操作。原创 2024-07-12 08:22:18 · 594 阅读 · 0 评论 -
编程参考 - 在C++类成员函数声明中使用const关键字
在 C++ 中,可以在类成员函数声明中使用 const 关键字来表示函数不修改对象的状态。将成员函数声明为 const 时,意味着该函数承诺不更改对象的任何成员变量(标记为可变的变量除外)。1. 确保对象的完整性: 通过将函数声明为 const,可以确保调用该函数不会修改对象的状态。在成员函数声明中使用 const 是一种良好的做法,可以防止对对象进行意外修改,从而提高代码的可靠性和可维护性。在本例中,accessCount 是一个可变成员变量,因此即使在声明为常量的显示函数中也可以修改。原创 2024-07-11 08:40:23 · 504 阅读 · 0 评论 -
编程参考 - 在C++类的析构函数前加virtual关键字
如果Base的析构函数前不加virtual的话,在“delete b”时,就不会调用到Derived类的析构函数。注意,只要基类的析构函数前加了virtual关键字,那么所有继承该基类的派生类的析构函数也都是virtual的,不管是否加virtual关键字。在声明C++类的析构函数时,最好加上virtual关键字,这样保证在使用到多态功能时,派生类和基类的析构函数能正确调用。使用了多态功能,用Base类的指针来操作Derived类的实例。析构时,先调用派生类的析构函数,再调用基类的析构函数。原创 2024-07-11 08:39:43 · 295 阅读 · 0 评论 -
编程参考 - Fence函数介绍
在现代并发编程中,内存栅栏并不经常被直接使用,因为更高层次的构造,如带有适当内存排序(memory_order_release 和 memory_order_acquire)的原子变量,往往能提供必要的同步,而不需要显式栅栏。内存栅栏(或内存屏障)功能可确保栅栏前后的内存操作不会被编译器或 CPU 重新排序。* 获取: 确保所有后续内存读取(加载)都能看到其他线程在获取栅栏之前写入的内存。* 释放: 确保在后续内存写入之前,其他线程可以看到之前所有的内存写入(存储)。* 需要对内存排序进行细粒度控制。原创 2024-07-01 08:34:46 · 747 阅读 · 0 评论 -
编程参考 - 理解Atomics和memory ordering
这意味着 a = 5;,那么 "a "就不能移到 "b "后面,因为 "b "依赖于 "a",这在逻辑上说不通。在这些架构中,加载和存储默认情况下仍是原子的,但只是 "放松"(Relaxed)的,而且需要为 "获取/释放"(Acquire/Release)添加处理。在实践中,不幸的是,SeqCst 经常被过度使用,这也是程序员不确定使用何种内存排序的一个问题信号...... 总之,当你不需要对不同原子变量进行总排序,也不需要部分排序时,你应该使用放松内存排序(在 LLVM 中也称为 Monotonic)。原创 2024-07-01 08:27:29 · 825 阅读 · 0 评论 -
编程参考 - GCC的条件编译
在 "#endif "后面加上注释并不是必须的,但如果有很多受控文本,这不失为一种好的做法,因为它可以帮助人们将 "#endif "与相应的 "#ifdef "匹配起来。与 "#if "一样,"#elif "指令包含一个要测试的表达式。换句话说,"#endif "总是与最近的 "#ifdef"(或 "#ifndef",或 "#if")相匹配。然后,只有当 "#elif "条件在原始的 "#if "和其中所有先前的 "#elif "指令失败后成功时,才会处理每个 "#elif "后面的文本。原创 2024-06-23 17:56:40 · 748 阅读 · 0 评论 -
C/C++ - 编码规范(USNA版)
特别是,如果你真的是编程新手,至少在前三周,尽量从头开始写代码,不要做任何复制粘贴的工作。例如,应在给变量分配固定的、非显而易见的值的语句旁边加上战术性注释。同样,无论你的源代码有多少行,如果它不能运行,它就是无用的,我也不会买你的程序。第二个例外情况出现在循环计数器变量的使用上,通常的做法是在 for 循环中使用 i 和 j 这样的变量作为计数器。如果将开头的大括号放在新行,本课程的首选是保留上一行的缩进,即不缩进大括号。本指南的目的不是限制你的编程,而是为你的程序建立统一的风格格式。原创 2024-06-23 17:44:11 · 734 阅读 · 0 评论 -
C++ - 介绍enum的使用
用逗号分隔的枚举器定义列表,每个枚举器定义都是一个唯一标识符(成为枚举器的名称),或者是一个带有常量表达式的唯一标识符:identifier = constant-expression。在 C++ 中,枚举关键字用于定义枚举,枚举是一种用户定义的数据类型,由一组命名的积分常量组成。= = = = = = = = = = = = 分割线 = = = = = = = = = = = =枚举是一种独特的类型,其值仅限于一个值范围(详见下文),其中可能包括几个明确命名的常量("枚举器")。原创 2024-06-21 08:30:17 · 390 阅读 · 0 评论 -
编程参考 - 使用静态连接库和动态链接库的区别
功能静态链接动态链接可执行大小较大(包含所有库代码)较小(包含对共享库的引用)内存使用量较高(每个程序都有重复的库代码)较低(共享库在内存中加载一次)可移植性高(独立的可执行文件)低(依赖外部库)更新需要重新编译可独立更新库性能启动时间稍好由于运行时链接,启动稍慢依赖关系管理更简单(无外部依赖关系)更复杂(必须管理库的版本** 灵活性**低(更改库时重新编译)高(交换库时无需重新编译)发行较简单(单一可执行文件)较复杂(确保存在共享库)原创 2024-06-09 16:21:07 · 1080 阅读 · 0 评论 -
编程参考 - 如何判断C++的std::funciton是否为空
在本例中,func 是默认构造的,所以它是空的。func) 条件通过使用 std::function 提供的隐式 bool 转换来检查 func 是否为空,其中空的 std::function 会求值为 false。在 C++ 中,如果一个类提供了显式或隐式转换操作符(如操作符 bool()),则可以在表达式中直接调用该操作符。* 我们使用 static_cast(func)显式调用operator bool() 转换操作符,如果 func 包含一个可调用的目标,则返回 true。原创 2024-06-01 11:31:59 · 1162 阅读 · 0 评论 -
C++标准库的头文件
允许这些头文件在 std 名称空间中也声明相同的名称,并且允许相应的 cxxx 头文件在全局名称空间中也声明相同的名称:包含 则肯定提供 std::malloc,也可能提供 ::malloc。与其他 xxx.h 头文件不同,C++里没有相对应的头文件 。头文件 、、 和 不包含 C 标准库中的任何内容,而只是包含 C++ 标准库中的其他头文件。原创 2024-03-24 21:39:08 · 964 阅读 · 2 评论 -
C语言标准库的头文件
值得一提的是,在cppreference的网页中,可以看到最下方列出的C语言的最新标准已经是2023年的了。通用数学功能(封装 math.h 和 complex.h 的宏)一般实用程序:内存管理、程序实用程序、字符串转换、随机数、算法。alignas 和 alignof 宏的使用。用于确定宽字符所含数据类型的函数。有条件编译宏,将其参数与零比较。扩展的多字节和宽字符实用程序。Refernces | 参考。noreturn宏的使用。确定字符数据类型的函数。处理字节和位类型的宏。执行校验整数运算的宏。原创 2024-03-23 08:00:00 · 971 阅读 · 0 评论 -
编程参考 - stdint.h头文件的使用
反之,对于本文描述的、实现没有提供的每种类型, 不应声明该类型定义名称,也不应定义相关宏。比如使用一个16位的寄存器的值,在32位的机器上要用short int类型来表示,在16位机器上,就用int类型来表示。它还定义了宏,用于指定与其他标准头文件中定义的类型相对应的整数类型的限制。比如一些最早期的嵌入式项目的代码中, 都会有个专门的类型定义的头文件,使基本类型的字节长度不依赖于平台。那为了方便代码的移植,最好使用固定字节长度的变量,比如在定义整数时加上使用的是几个字节或多少位。原创 2024-03-21 16:01:45 · 909 阅读 · 0 评论 -
C++Weekly - Code Review: O3DE Game Engine
更好的是直接删除。,基类这样定义后,派生类就不用再定义一个virtual的析构函数了。找代码复杂度数值比较大的函数,指标是cyclomatic complexity,缩写CCN。3,需要使用的cmake版本是一个很新的,3.20的版本。12,在Visual Code里查找析构函数的正则表达式: ~[A-Za-z0-9]+\(\)4,lizard,一个python工具,能分析多种语言的代码。11,空的析构函数会影响编译器的优化操作,对性能有很大影响。8,使用了C++11里的foreach。原创 2023-12-14 08:00:00 · 120 阅读 · 0 评论 -
编程参考 - C++ Code Review: 一个计算器的项目
9,Team work时,你提交的代码,创建的pull request,有别人帮忙review,如果自己一个人的话,也最好遵循这个流程。1,拿到一个project,第一眼看,没有配置文件,说明没有引入持续集成系统,continuous integration system。15,sliced: 一个全新创建的对象,只从派生类取得一部分内容,别的可以用到多态的内容就不要了。因为不需要,还会在多态时引起不必要隐患。19,如果在一个项目里,使用pragma once,里面基本只是symlinks,你会很痛苦。原创 2023-11-24 08:00:00 · 275 阅读 · 0 评论 -
编程参考 - std::exchange和std::swap的区别
编译器非常善于优化对 std::exchange 的调用,所以我们当然能得到我们通常期望的拷贝消除(copy elision)。但是,我们在这里做的工作比必要的要多一些,而且还犯了 "ITM antipattern(initialize-then-modify)"的错误。这个回调类内部调用 defer_event 并因此产生自己的事件是安全的:我们使用 tmp,这样调用 defer_event 就不会使循环中的迭代器失效。就像我们一直在用的i++, 后缀操作符,在使用完i的值后,再对i的值进行修改。原创 2023-09-16 17:48:47 · 784 阅读 · 0 评论 -
编程参考 - C++运算符优先级
C++运算符的优先级和相关性。运算符列表从上到下,优先级逐步降低。原创 2023-08-31 08:00:00 · 157 阅读 · 0 评论 -
编程参考 - C运算符优先级
sizeof 的操作数不能是类型转换:表达式 sizeof (int) * p 可以明确地解释为 (sizeof(int)) * p,但不能解释为 sizeof((int)*p)。关联性规范对于一元操作符来说是多余的,只是为了完整起见才显示出来:一元前缀操作符总是从右向左关联(sizeof ++*p 就是 sizeof(++(*p))),而一元后缀操作符总是从左向右关联(a[1][2]++ 是 ((a[1])[2])++ )。例如,表达式 *p++ 将被解析为 *(p++),而不是 (*p)++。原创 2023-08-30 08:57:59 · 160 阅读 · 0 评论 -
编程参考 - Vector和Deque的效率对比
总之,虽然 deque 在随机位置或前端插入的效率可能比 vector 高,但 vector 由于其连续的内存布局,在随机存取方面可能提供更好的性能。不过,值得注意的是,在随机访问元素时,vector的效率可能更高,因为vector将元素存储在连续的内存块中。不过,在需要在容器前端或后端频繁插入或删除元素的情况下,deques 的性能可能会优于vector。虽然 deque 的扩展(增加空间的大小)通常比vector的扩展开销更小,因为它不需要将现有元素复制到新的内存中,但效率会因执行的具体操作而不同。原创 2023-08-22 15:20:23 · 507 阅读 · 0 评论 -
编程参考 - C语言中未定义宏的值
pp-number指的是预处理过程中的数字符号。可以是数字开头,或小数点开头。可以使用计数法,比如使用e+, e-, E+, E-, p+, p-, P+ 或P-的字符序列,对应相应的计数方法。在C99标准中,6. Language -> 6.4 Lexical elements -> 6.4.8 Preprocessing numbers里,宏定义在预处理阶段展开,如果没有定义,在预处理命令中使用此宏,则此宏的值为0;在普通代码中展开此宏的话,会出现编译错误。就是说,没有定义的宏,会转换为0值。原创 2023-04-19 08:32:49 · 845 阅读 · 0 评论 -
转载 - 应用编码标准和自动化工具,提高代码质量
对此 MISRA C 的轮值主席 Andrew Banks 特意做了解释说明:虽然 MISRA 最开始推出的时候主要是针对汽车行业的,但由于它本身其实是在 C/C++ 语言的基础上,加上了一些约束,去掉了一些让人容易出错的编程方法,保留了常用的写法,尽可能让开发者保持一致,提高可维护性和可移植性,从而提高安全性和可靠性。遵循编码标准的最有效的方式是应用自动化工具,包括静态分析工具,运行时分析工具,这样可以有效的在开发过程中提高代码质量,既减少了项目的开发时间和成本,又提高了产品的质量和竞争力。原创 2023-03-15 17:39:06 · 241 阅读 · 0 评论 -
编程参考 - GCC中的Basic ASM
一种是基本asm语句,是没有操作数的语句(见基本asm),而另一种扩展asm语句(见扩展asm)包括一个或多个操作数。编译器将基本asm中的汇编程序指令逐字复制到汇编语言输出文件中,而不处理汇编代码,也包括可以在扩展asm中使用的“%”运算符。在一个asm基本语句中的汇编指令部分,可以包含多条汇编指令,分隔方法使用当前系统的汇编代码的分隔符即可。在包含非空的汇编语句的基本asm中,GCC假设这些其构成的汇编语句块,不会更改通用寄存器,但可以读写全局变量。可以写的内容,包括汇编指令、汇编宏,汇编函数等。原创 2023-02-26 09:36:55 · 1149 阅读 · 0 评论 -
编程参考 - C++使用hashmap
我们一般使用int和string类型,是有这个运算符的,如果使用其他的类型,就可能需要自己实现operator原创 2023-01-19 10:09:37 · 3418 阅读 · 0 评论 -
编程参考 - va_list的定义问题
会发现,这个类型的定义虽然由头文件stdarg.h提供,是C标准,但实际定义却是根据编译器、操作系统和ABI所决定的。但当使用mips-linux toolchain时,第三个就会调用到No.2函数,这种情况仅发生在format后面只有一个参数,且是char*变量时。编译器在根据参数列表选择要调用的函数时,第一个参数两个函数都匹配,而第二个的话,char*就匹配到了va_list,优先于省略参数。gcc中的arm.cc和aarch64.cc里面有各自的va_list的定义。原创 2023-01-01 09:34:41 · 1059 阅读 · 0 评论 -
编程参考 - GNU编译使用的命令行选项: 选择语言标准的“-std=“
编译器可以接受几种基本标准,如'c90'或'c++98',以及这些标准的GNU定制版(dialects ),如'gnu90'或'gnu++98'。当指定了一个基本标准时,编译器会接受所有遵循该标准的程序,以及那些使用GNU扩展的、与该标准不矛盾的程序。另一方面,当一个标准的GNU定制版被指定时,编译器所支持的所有特性都被启用,即使这些特性改变了基础标准的含义。支持是试验性的,在未来的版本中可能会有不兼容的变化。支持是实验性的,在未来的版本中可能会有不兼容的变化。对这个版本的支持是试验性的,不完整的。原创 2022-12-16 14:13:43 · 2140 阅读 · 0 评论 -
编程参考- 如何判断当前系统架构是大端还是小端
然后我们在一个整型中存放数据,4个字节的int类型,从低地址开始打印数据,其存放的是低位的数字。首先看到,结构体里的成员,其存放地址,是按照声明的顺序挨个排列的,由低地址到高地址。在字节内部,就没有顺序了,0x78放到8个bit里,怎么放怎么读都是一样的。第一个字节存放的0x78,这是整数0x12345678的最低有效位的数字。所以这个环境下就是小端的,little endian。原创 2022-12-09 09:35:38 · 484 阅读 · 0 评论