c相关内容

为什么sem_open在没有共享内存的情况下使用fork()?

这个程序可以工作(我测试了它),即使信号量不在共享内存中。注意我是如何在fork()之前创建一次变量的。 另一方面,使用sem_init()创建的信号量需要在共享内存中才能工作。但它仍然是sem_t结构,为什么不需要共享内存? sem_t结构的内容有什么不同吗? sem_t *s = sem_open("mysemaphore1", O_CREAT, 0600, 0); if (fo ..
发布时间:2022-05-11 19:54:18 服务器开发

用C99中的库在Windows上用TCC编译文件

所以TCC的最新版本理应实现了C99的一些功能,但我发现它没有包含C99的数学库。 有没有办法让它在Windows上更多地使用C99的库?我在谷歌上搜索了一下,发现了一些主要与Linux有关的建议,但对于这个项目,我需要让它在Windows上运行。 编辑:这不是在Windows平台上获得‘任何’编译器的问题。我意识到有很多编译器。我特别需要让TCC来做这件事。 编辑:项目需要执行 ..
发布时间:2022-05-08 21:57:01 其他开发

基准测试--CPU时间长于墙时间?

我在Linux上测量了排序算法的CPU时间和挂起时间。我使用getrusage来测量CPU时间,使用clock_gettime CLOCK_MONOTONIC来获得墙时间。虽然我注意到一个CPU的时间比墙上的时间长,但这是正确的吗?我一直认为CPU时间必须少于墙上的时间。我的示例结果: 3.000187 seconds [CPU] 3.000001 seconds [WALL] 推荐 ..
发布时间:2022-04-20 14:46:24 其他开发

C语言中的通用头文件

Like#include ,它替换了C++中的所有头文件 它们在C中是相似的头文件,可以替换所有头文件吗? [C中是否存在头文件?] 它应该替换所有头文件,如 #include #include #include ...以此类推。 如果答案是否,您能说出原因吗?(简明地 ..
发布时间:2022-04-20 12:12:26 C/C++开发

为什么要使用单独的源文件?

我正在学习C语言,来自脚本语言背景,非常耐人寻味,也相当令人困惑。 我如何得到这个问题的一个简短故事: 起初我很困惑为什么不能将源文件(.c)包含在另一个源文件中,然后我发现函数声明重复。然后我发现了头文件(.h),并感到困惑,为什么我必须在一个文件中声明一个函数,然后在另一个文件中定义,如果有什么变化,我必须编辑两个文件,所以我开始在头文件中定义函数。然后我发现#ifndef不能跨单独的 ..
发布时间:2022-04-20 12:01:47 其他开发

在GCC 10.2.1而不是GCC 8.3.0上首次定义的&的多重定义

我查看了Stackoverflow和更广泛的Internet,发现此错误的最常见原因是声明(int var = 1;)和定义(int var;)合并,并包括.h文件中的.c文件。 我刚刚从一个文件拆分成几个文件的小项目没有做任何这些事情。我非常困惑。 我复制了项目并删除了副本中的所有代码(这很有趣),直到我到达此处: main.c #include "a.h" int m ..
发布时间:2022-04-20 11:58:22 服务器开发

Snprint tf(空,0,...);行为是否标准化?

在Linux上,它返回要打印的字符数。 这是标准化行为吗? 推荐答案 是。 从7.21.6.5开始,n1570(C11草稿): Snprintf函数等同于fprint tf,只是输出 被写入数组(由参数s指定的fi),而不是写入 小溪。如果n为零,则不写入任何内容,并且s可能为空 指针。否则,第n-1个以外的输出字符为 丢弃而不是写入数组,并且为空字符 被写在实际写入 ..
发布时间:2022-04-20 11:01:30 其他开发

非空函数中的空返回,是未定义的行为吗?

在阅读了有关控制到达非空函数末尾这一主题的答案后,我没有看到任何答案特别提到使用空return语句退出非空函数的情况: int return_integer() { return; } // empty return in non-void function 到目前为止,我在C standard中找到的是: 6.8.6.4返回语句 约束 带表达式的return语句不应 ..
发布时间:2022-04-20 10:25:15 其他开发

&q;char(*a)[12]&q;是什么意思?

这是来自C标准的吗? 推荐答案 因为C中的声明遵循运算符优先规则(即数组订阅在间接之前求值),所以您需要用括号来声明指向数组类型的指针。 在许多用例中,使用普通char *并没有什么实际好处,除了它是一种强制数组大小的方法,尤其是在用作函数参数时: void foo(char bar[42]); 相当于 void foo(char *bar); 并接受任何ch ..
发布时间:2022-04-20 10:22:08 其他开发

为什么无符号整型提升为有符号整型?

标准很明确:当对小于int的整型进行算术运算时,首先将该整数提升为有符号int,除非int不能代表原始类型的全值范围,在这种情况下,提升为unsigned int。 我的问题是:什么是(曾经?)这项政策的动机是什么?为什么将无符号类型提升为有符号int,而不是始终为unsigned int? 当然,在实践中几乎没有区别,因为底层汇编指令是相同的(只是零扩展),但升级到signed in ..
发布时间:2022-04-20 10:04:21 其他开发

使用MemSet(…)合法吗, ;0, ;…)在一系列的双打上?

将Double数组(使用memset(…, 0, …))或包含Double的结构的内存清零合法吗? 这个问题意味着两件不同的事情: 从C标准的角度看:这是NOT的未定义行为吗?(我认为,在任何特定的平台上,这都不可能是未定义的行为,因为它只是取决于内存中浮点数的表示形式--仅此而已。) 从实际角度看:在英特尔平台上可以吗?(不管标准是什么。) 推荐答案 C99标准附件 ..
发布时间:2022-04-20 09:59:33 其他开发