问题标签 [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.

0 投票
1 回答
353 浏览

c - 在 C89 中,如何将双精度浮点数截断并拆分为两个 32 位字?

以 C99 为目标时,我可以使用以下代码将一个值截断并拆分double为两个 32 位整数:

然而,C89 似乎没有定义 64 位整数类型,所以我不能使用编译器来执行截断。即使不需要截断(值已经表示一个整数),我也不能使用像&or这样的位运算符,因为它们对值>>不起作用。double

那么,如何split()在纯 C89 中实现上述函数(因此不依赖 64 位整数),返回构成存储在double值中的 53 位整数的 21/32 位字?

0 投票
3 回答
114 浏览

c - Malloc() 和 free() 阻止我在 C 中按值传递结构

我正在做一个项目,我不断收到分段错误,并且结构的值没有被传递。弄清楚为什么让我发疯。我试过用更简单的程序来解决问题,我想我已经找到了问题,但我不确定如何解决它。

问题是,当我“malloc”一个结构时,然后按值传递,值就会丢失。稍后添加“免费”会产生分段错误。我不想从“malloc()”之前或“free()”之后访问一个值,所以我对为什么会这样感到困惑。

这是一个简单的问题模型:

这会产生:

我用“gcc -Wall -pedantic -ansi”编译程序,没有得到任何错误或警告。

当我注释掉“malloc”和“free”时,它会正确产生:

如果我只注释掉“free”但留下“malloc”,则可以修复分段错误,但结构的值仍然不正确。在这个简单的程序中,我真的不需要“malloc()”和“free()”,但在我的大型项目中确实需要它们。如果我能让他们在这个更简单的程序中工作,那么我想我可以修复更大的程序。不幸的是,我在 Google 上找不到类似的问题。

0 投票
1 回答
597 浏览

c - C fgets() 获取输入直到 EOF 而不是输入两次

我正在创建一个反转每一行输入的程序。

这是我的代码:

我的测试输入:

我可以很好地打印第一行:

但是当我开始输入下一行输入时,它就在反向输入的旁边,所以为测试输入运行的完整程序如下所示:

什么时候应该是这样的:

作为一种解决方法,我Enter在输出后再次按下以能够在自己的行上输入下一行输入,但我不明白为什么我需要这样做。

0 投票
1 回答
161 浏览

c - 将多维数组转换为另一种类型的多维数组

我有

声明为硬编码八位字节值的三维 16x256x16 数组。

出于优化目的和其他各种原因,我需要将此数组解释为 uint64_t 值的三维 16x256x2 数组:

我需要的是一种在严格的 ISO/ANSI C中强制转换的有效方法 。这是:longByteTable reinterpretedTable

这样做的正确方法?

PS我不能longByteTable用后一种类型声明,因为那样它不能在不同的字节序下正常工作,我需要为不同的字节序声明不同的表,或者执行一些运行时检查和轮换。是的,重新解释数组的所有进一步转换都是字节顺序不变的。

0 投票
0 回答
377 浏览

c - c - flex yacc 和 yyparse 的分段错误

我试图使用 flex 和 yacc 实现编译器。当我使用 yyparse() 控制台返回“核心转储的分段错误”。如何解决这个问题?

编译中的警告:

解析.y (yacc)

0 投票
1 回答
319 浏览

c# - 元语言代码为 ANSI-C 和 C# 结构生成打包结构

我正在尝试找到一种“元语言”,可用于为成员定义结构和获取/设置代码。问题是该结构已经存在于代码中,并且这种“元语言”将作为原始手动编码结构的逐位替换,以允许生成描述结构的标头。关键是这些结构被用作 C# 应用程序和嵌入式设备之间协议的一部分(不是基于 linux 的,认为像 PI​​C 或 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# 结构,但那里没有一个好的选择。

有什么建议吗?

0 投票
1 回答
74 浏览

c - 评估可用物理内存的数量

首先:我的应用程序不是在具有虚拟内存或 MMU 或类似东西的“普通”操作系统上运行,而是在具有固定且有限数量的物理内存的嵌入式系统上运行。

所以这个问题集中在普通的 ANSI-C 上:当我调用 malloc() 时,可用内存量会因分配的大小而减少。是否有可用于检索剩余空闲内存量的 ANSI-C 函数?

0 投票
3 回答
1428 浏览

c - 为什么当我向 atof() 函数传递一个数字后包含无效字符的字符串时,它不返回 0?

我需要将字符串转换为浮点数。如果字符串不是数字,我希望返回 0。

我试图atof()通过使用以下代码来测试该功能是否适用:

根据我对 atof 的理解,当 atof 无法转换时返回的值为 0,而这一行打印1.0.

为什么会这样?通过文档,我了解到 atof 意味着只要输入不是数字就返回 0 。

0 投票
1 回答
2994 浏览

c - 多个定义和第一个定义的错误

我编写了一个由几个文件组合而成的小型 C 程序。当我编译时,我收到“多个定义”的错误。

我的 main.c:

我的 mat.c 文件:

我的 general_structs.h 文件:

我的制作文件:

我一直在尝试用各种技术解决这个问题,但没有成功。

我收到的错误是:

为什么会出现这个错误?我该如何解决这个问题?

谢谢

0 投票
2 回答
74 浏览

visual-studio-2015 - 如何查看用 Visual Studio 编写的 Ansi C hello world 的汇编代码?

我在 Visual Studio 中使用 Ansi C,创建了简单的 Ansi C 程序(我不得不将 VS 配置更改为不使用 cpp 而是使用 ansi c)

我编译了它并生成了这个:

在此处输入图像描述

首先,我期待一个简单的 .exe,但我不知道为什么会创建这个 .ilk 和 .pdb,但这里的问题是如何查看编译后的 c 程序生成的汇编代码?

谢谢