c89相关内容
..
我正在使用通过 rs232(通过 USB 的 rs232)连接到 PC 的嵌入式设备. 我正在考虑开发自己的协议: 但我不想重新发明轮子. 请注意:我正在考虑相当受限的设备:4kb 的 RAM,没有内核,也没有标准 C 库. 你能想出一个标准的方法来做到这一点(也许是开源库)? 如果您编写自己的
..
我在我的哈希表实现中使用 FNV 哈希作为哈希算法,但我在这一行的问题标题中收到警告: 无符号哈希 = 2166136261; 我不明白为什么会这样,因为当我这样做时: printf("%u\n", UINT_MAX);printf("2166136261\n"); 我明白了: 42949672952166136261 这似乎在我的机器的限制之下...... 为什么我会收到警告,
..
出于不值得一提的原因,我想知道布尔表达式是否有标准定义的值.例如 int foo () {返回 (bar > 5);} 背景是我担心我们的团队将 TRUE 定义为不同于 1 的东西,我担心有人可能会这样做: if (foo() == TRUE) {/* 做事 */} 我知道最好的选择是简单地做 if (foo()) 但你永远不知道. 是否有为布尔表达式定义的标准值,还是取决于编译
..
我正在使用 Linux 机器.是否有任何系统命令可以找到我正在使用的 C 编译器所遵循的标准? 解决方案 这取决于编译器,我假设你使用的是 GCC.您可以使用以下方法检查编译器定义的宏: gcc -dM -E -
..
一段代码: long rangeVar = 0;rangeVar = atol(p_value);if (rangeVar >= -2147483648 && rangeVar
..
据我了解,C 规范说 int 类型应该是目标平台上最有效的类型,至少包含 16 位. int_fast16_t 的 C99 定义不也是这样吗? 也许他们把它放在那里只是为了保持一致性,因为需要其他 int_fastXX_t? 更新 总结以下讨论: 我的问题在很多方面都是错误的.C 标准没有为 int 指定位数.它给出了它必须包含的范围 [-32767,32767].
..
问题很简单.据我了解,GCC 认为在 32 位环境中,字符将按字节对齐,整数按 4 字节对齐.我也知道 C99 标准 6.3.2.3 说在未对齐的指针类型之间进行转换会导致未定义的操作.C 的其他标准对此有何看法?这里还有许多经验丰富的编码员 - 对此的任何看法将不胜感激. int *iptr1, *iptr2;字符 *cptr1, *cptr2;iptr1 = (int *)cptr1;cpt
..
我正在尝试为编程作业格式化以空格分隔的用户输入. 本质上,输入由任意数量的表达式组成 L integer integer integer 和 C integer integer integer. 例如:L 1 1 5 7 C 4 5 3. 到目前为止,我已经设法根据初始字符提取整数,并且可以使用 scanf 函数遍历字符串: char a;while(scanf("%c"
..
是否有符合标准的方法来表示 ANSI (C89/90) C 中的字节?我知道,大多数情况下,char 恰好是一个字节,但我的理解是,不能保证情况如此.另外,C99标准中有stdint.h,但是C99之前用的是什么? 我对 8 位和一个“字节"(sizeof(x) == 1)很好奇. 解决方案 char 总是一个 byte ,但它并不总是一个 octet.字节是内存的最小可寻址单位(在
..
如何启用 VLA、C99 中定义的可变长度数组、MS Visual C++ 或根本不可能的使用? 是的,我知道 C++ 标准基于 C89,并且 VLA 在 C89 标准中不可用,因此在 C++ 中不可用,但 MSVC++ 也应该是 C 编译器,一种可以打开的行为使用/TC 编译器参数(Compile as C Code (/TC)).但是这样做似乎并没有启用 VLA,并且编译过程在构建为 C
..
为了教育和编程实践,我想编写一个简单的库,可以处理原始键盘输入,并“实时"输出到终端. 我想尽可能地坚持使用 ansi C,我只是不知道从哪里开始这样的事情.我已经做了几次谷歌搜索,99% 的结果使用了库,或者用于 C++. 我真的很想让它在 Windows 中运行,然后在我有时间的时候将它移植到 OSX. 解决方案 尽可能坚持使用标准 C 是一个好主意,但仅使用标准 C 无法
..
我已经开始在 codechef 上进行编程练习,并且已经被 C 和 C99 之间的差异所迷惑.C在这里是什么意思?是 C89 吗?检查此提交底部的语言.它包含 C 和 C99. 我在 Internet 上发现了一种叫做 GNU C 的东西.Linux/unix 系统是否有不同的 C?这些是否符合 ANSI 的 C 标准?我也在一些地方读过“C99严格".这是什么? 是否还有其他不同的
..
我正在使用 C 并试图访问常量 M_PI (3.14159...).我已导入 math.h 头文件,但 M_PI 常量仍未定义.通过在 StackOverflow 上的一些搜索,我发现我需要将 #define _USE_MATH_DEFINES 添加到我的代码中(参见下面的示例代码).这在正常编译时工作正常,但我需要能够使用 std=c89 标志来编译我正在做的工作. 我应该如何从一些 C8
..
在阅读一些 FreeBSD 源代码时(参见:radix.h 行 158-173),我发现变量声明跟在定义中的“函数标题"之后. 这在 ISO C (C99) 中有效吗?什么时候应该在生产代码中完成而不是仅仅在“函数标题"中声明变量?为什么要在这里做? 我指的是标题字符串的函数,看起来像这样:int someFunction(int i, int b) { 解决方案 看起来像 K
..
要真正符合标准,C 中的所有函数(main 除外)都必须有一个原型,即使它们只在同一翻译单元中定义之后使用? 解决方案 这取决于您所说的“真正符合标准"是什么意思.然而,简短的回答是“最好确保所有函数在使用前都有一个范围内的原型". 一个更合格的答案指出,如果函数接受可变参数(特别是 printf() 函数系列),那么原型必须在范围内才能严格符合标准.这适用于 C89(来自 ANSI
..
我要问的是众所周知的“结构的最后一个成员具有可变长度"的技巧.它是这样的: struct T {内里;字符 [1];};struct T *p = malloc(sizeof(struct T) + 100);p->len = 100;strcpy(p->s, "你好世界"); 由于结构体在内存中的布局方式,我们能够将结构体覆盖在一个大于必要的块上,并将最后一个成员视为大于 1 个字符指定.
..
编辑:我已经添加了示例的源代码. 我遇到了 这个例子: char source[MAX] = "123456789";char source1[MAX] = "123456789";字符目的地[MAX] = "abcdefg";char destination1[MAX] = "abcdefg";字符 *return_string;整数索引 = 5;/* 这就是 strcpy 的工作原理
..
我正在寻找 C89/C90 标准的免费副本,但我在任何地方都找不到!为什么这么难找? C99 和 C11 标准很容易在 Internet 上获得副本.即使在 Stack Overflow 问题中我在哪里可以找到当前的 C 或 C++ 标准文档? 和 C 标准,获得标准 不包含我'我在找. 网络搜索也没有帮助,开放标准也没有帮助. 解决方案 您可以在此处找到 C89、C99 和
..
考虑下面的main(): int main(int argc, char *argv[]){返回 (0);} 使用 cc -Wall -Wextra 编译后,会生成警告说“未使用的参数". 当我不需要在函数中使用参数时(例如在 信号处理函数中 不使用其 int 参数),我习惯于执行以下操作: int main(int argc, char *argv[]){(无效)argc;(无效)
..