12得票3回答
在嵌入式设备上,如何使用C89将字节流转换为数据包流的方法

我正在处理一个嵌入式设备,使用rs232(通过USB的rs232)连接到计算机上。 我在考虑开发自己的协议: <MAGIC><LENGTH><BINARY DATA><CRC> 但是我不想重复造轮子。 请注意:我考虑的是非常受限制的设备:...

12得票3回答
如何在Visual Studio中“模拟”C99以进行变量声明

我正在使用Visual Studio 2012开发简单的Win32 C程序。我知道VS编译器只支持C89,但我想知道是否有一种方法可以覆盖这个限制。 特别是我想在代码的任何地方声明变量,而不是仅在作用域块的开头(如C89所要求的那样)。 提前感谢。

12得票1回答
无操作C宏中全局范围分号警告的解决方法

在一个既可以作为C也可以作为C++构建的代码库中,我想制作一个宏,以利用C++11或更高版本中的static_assert。 (注:我知道有办法在C11之前的C中做到这一点,至少如果你愿意接受消息参数——虽然它不会完全适用于所有情况。但是为了论证的目的,让我们假设我有一些合法的需要使其不带消...

12得票4回答
为什么这个函数通过递增一个字符指针来返回字符串的正确长度?

这是一个用于计算字符串中字符数量的函数:int str_len(const char* s) { int i = 0; while(*(s++)) { i++; } return i; } 为什么这会返回正确的长度? 假设我用一个简单的字符串"a...

11得票2回答
"EiC"的含义是什么?

看起来我找不到"EiC"是什么意思。 它被用作解释器,语义前端IDE类似于"Clang",但稍微旧一些。 它的含义是什么,为什么我找不到任何参考资料呢?

11得票2回答
在调用va_end之前使用longjmp是否可以?

在这个问答中,已经确认您应该总是调用va_end(): 什么是va_end?是否总是需要调用它? 但是如果一个代码块在到达va_end()之前跳转了怎么办? va_end有什么承诺吗?或者从概念上讲,它可能会在va_start()中进行内存分配,导致泄漏,而不是使用堆栈技巧?

10得票3回答
将整数字面量添加或赋值给size_t类型

在C语言中,我看到很多将整数字面值添加或赋值给size_t变量的代码。size_t foo = 1; foo += 1; 这里发生了什么类型转换,是否可能将 size_t "升级" 为 int,然后再转换回 size_t?如果我处于最大值,这种情况会发生截断吗?size_t foo = SIZ...

10得票2回答
HAT-trie在ANSI C中的实现?

我正在寻找一份以某个自由许可证发布的 ANSI C HAT-trie 实现。但是我还没有找到符合条件的。请问你能否给我指出一个独立的实现或者使用 HAT-tries 的程序,以便我至少了解如何正确地实现它? HAT-trie 的原始论文可以在这里找到:http://crpit.com/con...

10得票3回答
启用换行功能后将终端光标返回到行首

我正在编写一个过滤器(在经过管道输出到终端时),有时需要“覆盖”刚刚发生的一行。它通过将标准输入逐字符传递到标准输出,直到达到\n,然后调用特殊行为来实现。我的问题是如何返回到行的开头。 我最初想到的是使用\r或ANSI序列\033[1G。但是,如果该行足够长以在终端上换行(从而导致其滚动)...

10得票3回答
C89与C99 GCC编译器比较

如果我使用c89和c99编译以下程序,是否会有区别?我得到了相同的输出。这两者之间真的有区别吗?#include <stdio.h> int main () { // Print string to screen. printf ("Hel...