7得票3回答
ISO C90禁止将声明和代码混合...但在某些情况下允许吗?

我正在使用以下标志(其中cc是gcc 4.2或clang 8.0): $ cc -Wall -Werror -pedantic -ansi -std=c89 main.c (我知道-ansi标志在这种情况下有些多余) 以下命令会给出预期的错误: main.c:31:8: warning...

8得票5回答
一个合法的数组赋值。这是否可能?

在阅读了K&R书中关于结构体的章节后,我决定进行一些测试以更好地理解它们,因此我编写了以下代码: #include <stdio.h> #include <string.h> struct test func(char *c); struct test {...

166得票5回答
C、C99、ANSI C和GNU C之间有什么区别?

我开始在codechef上进行编程练习,但被C和C99之间的区别混淆了。这里的C是什么意思?是指C89吗?请查看此提交页面底部的语言选择。它包含C和C99两种。 我在网上找到了一个叫做GNU C的东西。linux/unix系统有不同于其他系统的C吗?它们是否符合ANSI的C标准?我还在一些地...

8得票4回答
c89: 将int转换为void*,再将其转换回来

首先,这不是一个重复的问题:Is it safe to cast an int to void pointer and back to int again?。两个问题的区别在于:我只使用void*来存储int,但我没有真正将其用作void*。 因此,问题实际上归结为: void *能够保证...

13得票1回答
符合要求的旧“结构体hack”的变体(?)

我相信我已经找到了一种类似于在可移植的C89中广为人知的“struct hack”的方法。 我很好奇这是否真正符合C89的规范。 主要思想是:我分配足够大的内存来容纳初始结构和数组的元素。确切的大小是(K + N) * sizeof(array_base_type),其中K被选择为K * s...

7得票6回答
人们在C语言中构建对象时使用哪些技术/策略?

我特别关注于在C语言内部使用的对象,而不是像Python这样的解释型语言的核心对象实现。

14得票5回答
我应该将参数存储类说明符放在函数定义中还是在声明和定义中都放置?

我正在将一些旧的K&R代码移植到ANSI C,所以我正在编写缺失的函数原型声明。很多函数定义具有寄存器存储类参数,但是我不确定在函数原型中是否可以省略寄存器存储类说明符? 无论是带有还是没有寄存器存储类特定声明,代码都可以正确编译(我尝试了GCC、VC++和Watcom C)。我在I...

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

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

8得票2回答
在C90中实现一个无溢出系统堆栈

我刚刚了解到Google Go默认使每个线程的堆栈大小减小,如果溢出会链接到新的堆栈(请参见这里的第16页)。我在想如何用C实现最佳方法。 我必须说我不是C专家,所以可能有更好的方法来检测C中的堆栈溢出,但考虑到我的无知,以下是我认为我会实现的方式: 我首先想到的是,每次我们有一个全新的堆...

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

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