c89相关内容

一种在嵌入式设备上将字节流转换为 C89 中的数据包流的方法

我正在使用通过 rs232(通过 USB 的 rs232)连接到 PC 的嵌入式设备. 我正在考虑开发自己的协议: 但我不想重新发明轮子. 请注意:我正在考虑相当受限的设备:4kb 的 RAM,没有内核,也没有标准 C 库. 你能想出一个标准的方法来做到这一点(也许是开源库)? 如果您编写自己的 ..
发布时间:2022-01-25 12:47:51 其他开发

无法摆脱“这个十进制常量仅在 ISO C90 中是无符号的";警告

我在我的哈希表实现中使用 FNV 哈希作为哈希算法,但我在这一行的问题标题中收到警告: 无符号哈希 = 2166136261; 我不明白为什么会这样,因为当我这样做时: printf("%u\n", UINT_MAX);printf("2166136261\n"); 我明白了: 42949672952166136261 这似乎在我的机器的限制之下...... 为什么我会收到警告, ..
发布时间:2022-01-23 23:52:15 其他开发

C中布尔表达式的返回值

出于不值得一提的原因,我想知道布尔表达式是否有标准定义的值.例如 int foo () {返回 (bar > 5);} 背景是我担心我们的团队将 TRUE 定义为不同于 1 的东西,我担心有人可能会这样做: if (foo() == TRUE) {/* 做事 */} 我知道最好的选择是简单地做 if (foo()) 但你永远不知道. 是否有为布尔表达式定义的标准值,还是取决于编译 ..
发布时间:2022-01-19 17:51:30 其他开发

“int"和“int"有什么区别?和“int_fast16_t"?

据我了解,C 规范说 int 类型应该是目标平台上最有效的类型,至少包含 16 位. int_fast16_t 的 C99 定义不也是这样吗? 也许他们把它放在那里只是为了保持一致性,因为需要其他 int_fastXX_t? 更新 总结以下讨论: 我的问题在很多方面都是错误的.C 标准没有为 int 指定位数.它给出了它必须包含的范围 [-32767,32767]. ..
发布时间:2022-01-14 14:52:16 其他开发

将 int 指针转换为 char ptr,反之亦然

问题很简单.据我了解,GCC 认为在 32 位环境中,字符将按字节对齐,整数按 4 字节对齐.我也知道 C99 标准 6.3.2.3 说在未对齐的指针类型之间进行转换会导致未定义的操作.C 的其他标准对此有何看法?这里还有许多经验丰富的编码员 - 对此的任何看法将不胜感激. int *iptr1, *iptr2;字符 *cptr1, *cptr2;iptr1 = (int *)cptr1;cpt ..
发布时间:2021-12-31 22:02:39 其他开发

在while循环中使用scanf函数

我正在尝试为编程作业格式化以空格分隔的用户输入. 本质上,输入由任意数量的表达式组成 L integer integer integer 和 C integer integer integer. 例如:L 1 1 5 7 C 4 5 3. 到目前为止,我已经设法根据初始字符提取整数,并且可以使用 scanf 函数遍历字符串: char a;while(scanf("%c" ..
发布时间:2021-12-26 18:03:31 其他开发

用于在 ANSI (C89/90) C 中表示字节的类型?

是否有符合标准的方法来表示 ANSI (C89/90) C 中的字节?我知道,大多数情况下,char 恰好是一个字节,但我的理解是,不能保证情况如此.另外,C99标准中有stdint.h,但是C99之前用的是什么? 我对 8 位和一个“字节"(sizeof(x) == 1)很好奇. 解决方案 char 总是一个 byte ,但它并不总是一个 octet.字节是内存的最小可寻址单位(在 ..
发布时间:2021-12-25 13:12:39 其他开发

在 MS Visual C++ 中启用 VLA(可变长度数组)?

如何启用 VLA、C99 中定义的可变长度数组、MS Visual C++ 或根本不可能的使用? 是的,我知道 C++ 标准基于 C89,并且 VLA 在 C89 标准中不可用,因此在 C++ 中不可用,但 MSVC++ 也应该是 C 编译器,一种可以打开的行为使用/TC 编译器参数(Compile as C Code (/TC)).但是这样做似乎并没有启用 VLA,并且编译过程在构建为 C ..
发布时间:2021-12-22 18:14:22 其他开发

ANSI C 中的无缓冲 I/O

为了教育和编程实践,我想编写一个简单的库,可以处理原始键盘输入,并“实时"输出到终端. 我想尽可能地坚持使用 ansi C,我只是不知道从哪里开始这样的事情.我已经做了几次谷歌搜索,99% 的结果使用了库,或者用于 C++. 我真的很想让它在 Windows 中运行,然后在我有时间的时候将它移植到 OSX. 解决方案 尽可能坚持使用标准 C 是一个好主意,但仅使用标准 C 无法 ..
发布时间:2021-12-21 17:56:50 其他开发

C、C99、ANSI C 和 GNU C 之间有什么区别?

我已经开始在 codechef 上进行编程练习,并且已经被 C 和 C99 之间的差异所迷惑.C在这里是什么意思?是 C89 吗?检查此提交底部的语言.它包含 C 和 C99. 我在 Internet 上发现了一种叫做 GNU C 的东西.Linux/unix 系统是否有不同的 C?这些是否符合 ANSI 的 C 标准?我也在一些地方读过“C99严格".这是什么? 是否还有其他不同的 ..
发布时间:2021-12-18 22:47:24 其他开发

使用 M_PI 和 C89 标准

我正在使用 C 并试图访问常量 M_PI (3.14159...).我已导入 math.h 头文件,但 M_PI 常量仍未定义.通过在 StackOverflow 上的一些搜索,我发现我需要将 #define _USE_MATH_DEFINES 添加到我的代码中(参见下面的示例代码).这在正常编译时工作正常,但我需要能够使用 std=c89 标志来编译我正在做的工作. 我应该如何从一些 C8 ..
发布时间:2021-12-17 14:56:04 其他开发

定义中函数标题后的 C 变量声明

在阅读一些 FreeBSD 源代码时(参见:radix.h 行 158-173),我发现变量声明跟在定义中的“函数标题"之后. 这在 ISO C (C99) 中有效吗?什么时候应该在生产代码中完成而不是仅仅在“函数标题"中声明变量?为什么要在这里做? 我指的是标题字符串的函数,看起来像这样:int someFunction(int i, int b) { 解决方案 看起来像 K ..
发布时间:2021-12-13 21:25:27 其他开发

C89、C90 或 C99 中的所有函数都需要原型吗?

要真正符合标准,C 中的所有函数(main 除外)都必须有一个原型,即使它们只在同一翻译单元中定义之后使用? 解决方案 这取决于您所说的“真正符合标准"是什么意思.然而,简短的回答是“最好确保所有函数在使用前都有一个范围内的原型". 一个更合格的答案指出,如果函数接受可变参数(特别是 printf() 函数系列),那么原型必须在范围内才能严格符合标准.这适用于 C89(来自 ANSI ..
发布时间:2021-12-02 08:17:59 其他开发

是“结构黑客"吗?技术上未定义的行为?

我要问的是众所周知的“结构的最后一个成员具有可变长度"的技巧.它是这样的: struct T {内里;字符 [1];};struct T *p = malloc(sizeof(struct T) + 100);p->len = 100;strcpy(p->s, "你好世界"); 由于结构体在内存中的布局方式,我们能够将结构体覆盖在一个大于必要的块上,并将最后一个成员视为大于 1 个字符指定. ..
发布时间:2021-12-02 08:12:31 其他开发

哪里可以找到 PDF 格式的 C89/C90 标准?

我正在寻找 C89/C90 标准的免费副本,但我在任何地方都找不到!为什么这么难找? C99 和 C11 标准很容易在 Internet 上获得副本.即使在 Stack Overflow 问题中我在哪里可以找到当前的 C 或 C++ 标准文档? 和 C 标准,获得标准 不包含我'我在找. 网络搜索也没有帮助,开放标准也没有帮助. 解决方案 您可以在此处找到 C89、C99 和 ..
发布时间:2021-11-28 17:44:49 其他开发

(void)var 实际上是做什么的?

考虑下面的main(): int main(int argc, char *argv[]){返回 (0);} 使用 cc -Wall -Wextra 编译后,会生成警告说“未使用的参数". 当我不需要在函数中使用参数时(例如在 信号处理函数中 不使用其 int 参数),我习惯于执行以下操作: int main(int argc, char *argv[]){(无效)argc;(无效) ..
发布时间:2021-09-20 18:34:12 其他开发