29得票1回答
无法消除“此十进制常量仅在ISO C90中为无符号”的警告提示

我在我的哈希表实现中使用FNV散列作为散列算法,但是我在这行代码上收到了问题标题中的警告:unsigned hash = 2166136261; 我不明白这为什么会发生,因为当我执行这个操作时:printf("%u\n", UINT_MAX); printf("2166136261\n"); ...

25得票3回答
C89中的{0}初始化器有多标准化?

在我的当前项目中,我们使用MISRA 2004标准,使用三个GCC编译器版本3.2.3、4.4.2和5.4.0。我们使用严格检查构建,包括pedantic开关、c89标准和许多其他限制。其中之一是所有数据必须在声明时初始化。问题在于,在GCC 3.2.3上,通用的零初始化器{0}只适用于基本单...

25得票2回答
如何使用GCC编译适用于独立环境的代码?

我正在处理的代码应该可以在托管和独立环境下构建,对于后者,需要为某些stdlib函数提供私有实现。 只使用普通的工作站/构建服务器上的GCC,我能否可靠地测试这一点?使用GCC编译自由环境 - "-ffreestanding"选项看起来很有前途,但似乎它只禁用了内置函数并正确设置了STDC...

24得票4回答
(void)var实际上是什么意思?

请考虑以下main()函数:int main(int argc, char *argv[]) { return (0); } 使用cc -Wall -Wextra编译时,会生成警告信息“unused parameter”。 当我在函数中不需要使用参数时(例如在int参数没有被使用的信号...

24得票3回答
警告:在ISO C90中,此十进制常量仅为无符号的。

一段代码:long rangeVar = 0; rangeVar = atol(p_value); if (rangeVar >= -2147483648 && rangeVar <= 2147483647) 编译时我收到以下警告: 警告:在ISO C90...

23得票7回答
一个与STL vector等效的好的C语言版本?

我注意到我们的代码库中有几个地方使用动态扩展数组,即基础数组和元素计数器以及“最大元素”值的组合。 我想要做的是用常见的数据结构和实用程序函数来代替这些数组,出于通常的面向对象编程的原因。数组元素可以是基本数据类型或结构体,我需要快速随机访问元素,并希望实现类型安全。 所以,基本上我想使...

23得票3回答
C:将双精度转换为单精度,保留小数点精度

我想在C语言中将double类型转换为float类型,但是想尽可能精确地保留小数点,而不做任何改动... 举个例子,假设我有以下数字: double d = 0.1108; double dd = 639728.170000; double ddd = 345.2345678...

22得票3回答
如何使用make和编译成C99?

我正在尝试使用Makefile编译一个Linux内核模块:obj-m += main.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modul...

22得票2回答
C语言中函数指针的递归声明

我想声明一个返回指向相同类型函数的指针的函数。 我想使用它来实现像下面这个状态机一样的东西:typedef event_handler_t (*event_handler_t)(event_t*); // compilation error event_handler_t state2(e...

21得票4回答
为什么在switch结构内不能使用“goto default;”或“goto case x;”语句?

C11第6.8.1节或C99,或C89的第3.6.1节似乎都表明default和case x(其中x是一些常量表达式)都是带标签的语句示例,以及适用于与goto一起使用的identifier:样式标签。 我知道我可以直接在default:或case x:标签后面放置一个identifier:...