问题标签 [ansi-c]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在 C89 中,如何将双精度浮点数截断并拆分为两个 32 位字?
以 C99 为目标时,我可以使用以下代码将一个值截断并拆分double
为两个 32 位整数:
然而,C89 似乎没有定义 64 位整数类型,所以我不能使用编译器来执行截断。即使不需要截断(值已经表示一个整数),我也不能使用像&
or这样的位运算符,因为它们对值>>
不起作用。double
那么,如何split()
在纯 C89 中实现上述函数(因此不依赖 64 位整数),返回构成存储在double
值中的 53 位整数的 21/32 位字?
c - Malloc() 和 free() 阻止我在 C 中按值传递结构
我正在做一个项目,我不断收到分段错误,并且结构的值没有被传递。弄清楚为什么让我发疯。我试过用更简单的程序来解决问题,我想我已经找到了问题,但我不确定如何解决它。
问题是,当我“malloc”一个结构时,然后按值传递,值就会丢失。稍后添加“免费”会产生分段错误。我不想从“malloc()”之前或“free()”之后访问一个值,所以我对为什么会这样感到困惑。
这是一个简单的问题模型:
这会产生:
我用“gcc -Wall -pedantic -ansi”编译程序,没有得到任何错误或警告。
当我注释掉“malloc”和“free”时,它会正确产生:
如果我只注释掉“free”但留下“malloc”,则可以修复分段错误,但结构的值仍然不正确。在这个简单的程序中,我真的不需要“malloc()”和“free()”,但在我的大型项目中确实需要它们。如果我能让他们在这个更简单的程序中工作,那么我想我可以修复更大的程序。不幸的是,我在 Google 上找不到类似的问题。
c - C fgets() 获取输入直到 EOF 而不是输入两次
我正在创建一个反转每一行输入的程序。
这是我的代码:
我的测试输入:
我可以很好地打印第一行:
但是当我开始输入下一行输入时,它就在反向输入的旁边,所以为测试输入运行的完整程序如下所示:
什么时候应该是这样的:
作为一种解决方法,我Enter在输出后再次按下以能够在自己的行上输入下一行输入,但我不明白为什么我需要这样做。
c - 将多维数组转换为另一种类型的多维数组
我有
声明为硬编码八位字节值的三维 16x256x16 数组。
出于优化目的和其他各种原因,我需要将此数组解释为 uint64_t 值的三维 16x256x2 数组:
我需要的是一种在严格的 ISO/ANSI C中强制转换的有效方法 。这是:longByteTable
reinterpretedTable
这样做的正确方法?
PS我不能longByteTable
用后一种类型声明,因为那样它不能在不同的字节序下正常工作,我需要为不同的字节序声明不同的表,或者执行一些运行时检查和轮换。是的,重新解释数组的所有进一步转换都是字节顺序不变的。
c - c - flex yacc 和 yyparse 的分段错误
我试图使用 flex 和 yacc 实现编译器。当我使用 yyparse() 控制台返回“核心转储的分段错误”。如何解决这个问题?
编译中的警告:
解析.y (yacc)
c# - 元语言代码为 ANSI-C 和 C# 结构生成打包结构
我正在尝试找到一种“元语言”,可用于为成员定义结构和获取/设置代码。问题是该结构已经存在于代码中,并且这种“元语言”将作为原始手动编码结构的逐位替换,以允许生成描述结构的标头。关键是这些结构被用作 C# 应用程序和嵌入式设备之间协议的一部分(不是基于 linux 的,认为像 PIC 或 CM0 一样更小,更受限制。)元语言将充当
- 结构成员的文档
- 为 get/set 操作生成 C# 结构和实现
- 生成打包的 ANSI-C 结构和获取/设置函数
元语言需要支持
- 枚举定义(具有指定的大小 - 即 uint16_t、uint8_t 或更小的多位枚举)
- 位数组(指定大小 - 即 48 位数组被打包成 6 个字节,)
- 位结构/枚举数组(指定大小 - 即 48 个索引的 2 位结构为 12 个字节,)
- 字节序和位序规范,
- 生成可以通过生成的 ANSI-C 代码或 C-sharp 代码直接读取的二进制结构,以便通过网络发送。
在收到数据时对数据进行一些有限的验证也会很好。
到目前为止,我已经看过
- BSON
- 蚀刻
- Hessian Avro
- 冰
- 消息包
- 协议缓冲区
- 节约
所有这些对于文档和构建新协议时都非常有用,但在尝试保持与现有协议的兼容性时,由于数据编组中固有的类型编码,这些都不足。
我还查看了 ASN.1 的 ECN 编码,但这似乎太难以理解,导致文档出现问题。
我已经查看了从 C 结构生成 C# 结构,但那里没有一个好的选择。
有什么建议吗?
c - 评估可用物理内存的数量
首先:我的应用程序不是在具有虚拟内存或 MMU 或类似东西的“普通”操作系统上运行,而是在具有固定且有限数量的物理内存的嵌入式系统上运行。
所以这个问题集中在普通的 ANSI-C 上:当我调用 malloc() 时,可用内存量会因分配的大小而减少。是否有可用于检索剩余空闲内存量的 ANSI-C 函数?
c - 为什么当我向 atof() 函数传递一个数字后包含无效字符的字符串时,它不返回 0?
我需要将字符串转换为浮点数。如果字符串不是数字,我希望返回 0。
我试图atof()
通过使用以下代码来测试该功能是否适用:
根据我对 atof 的理解,当 atof 无法转换时返回的值为 0,而这一行打印1.0
.
为什么会这样?通过文档,我了解到 atof 意味着只要输入不是数字就返回 0 。
c - 多个定义和第一个定义的错误
我编写了一个由几个文件组合而成的小型 C 程序。当我编译时,我收到“多个定义”的错误。
我的 main.c:
我的 mat.c 文件:
我的 general_structs.h 文件:
我的制作文件:
我一直在尝试用各种技术解决这个问题,但没有成功。
我收到的错误是:
为什么会出现这个错误?我该如何解决这个问题?
谢谢