Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

9
数组类型与使用malloc分配的数组之间的区别
今天,我用一些C代码帮助了我的一个朋友,但我发现了一些奇怪的行为,无法解释他为什么会这样。我们有一个TSV文件,其中包含一个整数列表,int每行一行。第一行是列表中的行数。 我们也有一个带有非常简单的“ readfile”的ac文件。第一行被读取为n,即行数,然后进行了以下初始化: int list[n] 最后一个为环n带fscanf。 对于小n(直到〜100.000),一切都很好。但是,我们发现,当n大(10 ^ 6)时,将发生段错误。 最后,我们将列表初始化更改为 int *list = malloc(n*sizeof(int)) 一切都很好,即使很大n。 有人可以解释为什么会这样吗?是什么引起的段错误int list[n],在我们开始使用时已停止list = malloc(n*sizeof(int))?

3
_Generic在C11中的语法和示例用法
我听说C11添加了泛型。我已经用Google搜索了一下,看了一些文章,了解到有一个新的关键字(_Generic)等等。但我似乎无法掌握所有内容。 它类似于C#中的泛型或C ++中的模板吗?谁能给我关于C11泛型定义,其语法和简单示例用法示例的简短说明?
70 c  generics  c11 

9
在C / C ++中获得正模的最快方法
通常,在我的内部循环中,我需要以“环绕”方式为数组建立索引,以便(例如)如果数组大小为100,并且我的代码要求输入元素-2,则应将其赋值为元素98。高级语言(例如Python)可以使用轻松实现my_array[index % array_size],但是由于某些原因,C的整数算术(通常)会舍入为零而不是始终舍入,因此,当给定第一个负数时,其模运算符将返回负数。 我常常知道这index不会少于-array_size,在这种情况下我会做到my_array[(index + array_size) % array_size]。但是,有时无法保证,对于这些情况,我想知道实现始终为正的模函数的最快方法。有几种“智能”方式可以做到而无需分支,例如 inline int positive_modulo(int i, int n) { return (n + (i % n)) % n; } 要么 inline int positive_modulo(int i, int n) { return (i % n) + (n * (i < 0)); } 当然,我可以对它们进行概要分析以找出哪个是系统上最快的,但是我不禁担心自己可能错过了更好的系统,或者我的计算机上的速度在另一台计算机上可能较慢。 那么,有没有一种标准的方法来执行此操作,或者我错过了一些巧妙的技巧,而这可能是最快的方法? 另外,我知道这可能是一厢情愿的想法,但是如果有一种方法可以自动矢量化,那就太神奇了。
70 c++  c  performance 

11
将GCC分别称为“ cc”和“ gcc”
我知道在大多数GNU / Linux系统上,可以从命令行通过名称“ cc”(而不是“ gcc”)调用GCC。一种方式与另一种方式调用时,GCC的行为是否有差异? 例如,我知道通过名称“ g ++”而不是“ gcc”调用GCC会导致GCC行为不同(它将.c文件视为C ++源代码,并在C ++标准库中链接)。“ gcc”与“ cc”之间在行为上是否有类似的区别? 编辑:到目前为止,关于GCC如果以一种方式调用还是以另一种方式调用,行为是否有所不同,到目前为止,没有一个答案给出明确的“是”或“否”。但是,提出深入研究源代码以检查其行为的想法使我沿着这条路走了。根据我在那里的发现,我现在认为答案是: 否。无论通过“ gcc”还是“ cc”调用,GCC的行为都相同。


11
如果您已经知道变量应该是常量,为什么还要使用关键字const?
const当不应该修改变量的值时,我正在阅读的许多书都使用关键字。除了向代码的读者指定如果您修改此变量可能会导致错误的代码(您可以使用注释来做到这一点),为什么还需要将该关键字作为任何编程语言的一部分?在我看来,如果您不想修改变量,那就根本不要。 有人可以帮我澄清一下吗?
70 c++  c  constants  keyword 

3
linux __user宏的含义是什么?
我希望有人能解释Linux内核源代码中使用的__user宏的细微差别。 首先,宏: # define __user __attribute__((noderef, address_space(1))) 现在,经过一番谷歌搜索后,我读到该宏允许一个人将一个指针指定为属于用户地址空间,并且不应取消引用它。 我可能会遗漏一些明显的事实,但是有人可以解释一下此类宏的含义吗?例如,该宏将在何处使用的一个好例子是什么?同样,如果我缺少明显的内容,请原谅我。 为了说明这一点,我在检查一些USB代码(linux / usbdevice_fs.h)时遇到了宏。我只是想对内核中使用的宏(或其他类似的宏)有一个一般的了解。 感谢您的光临!

6
将预处理器令牌转换为字符串
我正在寻找一种将预处理器令牌转换为字符串的方法。 具体来说,我在某处: #define MAX_LEN 16 我想用它来防止缓冲区溢出: char val[MAX_LEN+1]; // room for \0 sscanf(buf, "%"MAX_LEN"s", val); 我愿意采用其他方式来完成同一件事,但仅限于标准库。

5
是否可以从C#.Net调用C函数
我有一个C库,想从C#应用程序中调用此库中的函数。我尝试通过将C lib文件添加为链接器输入并将源文件添加为其他依赖项来在C lib上创建C ++ / CLI包装器。 有什么更好的方法可以实现这一点,因为不确定如何将C输出添加到c#应用程序中。 我的C代码- __declspec(dllexport) unsigned long ConnectSession(unsigned long handle, unsigned char * publicKey, unsigned char publicKeyLen); 我的CPP包装器- long MyClass::ConnectSessionWrapper(unsigned long handle, unsigned char * publicKey, unsigned char publicKeyLen) { return ConnectSession(handle, publicKey, publicKeyLen); }
70 c  c#-4.0  interop 

14
Unix上的递归mkdir()系统调用
在阅读了具有该名称的Unix系统调用的mkdir(2)手册页之后,看来该调用不会在路径中创建中间目录,而只会在路径中创建最后一个目录。有什么方法(或其他功能)可以在不手动解析目录字符串并单独创建每个目录的情况下创建路径中的所有目录吗?
70 c  posix  unix  mkdir 

8
有单线函数生成三角波吗?
以类似的方式,模产生锯齿波。它不必是连续的。 这是我的意思: int m = 10; int x = 0; int i = 0; while (i < m*3) { printf("%d ", x); x++; x = x % m; i++; } 生成三个序列0..9,如下所示: 请注意,峰右侧的斜率只是一个图形伪像 在这种情况下,单线为x = i ++%m 我想要的是: 如果您知道另一种波形(正弦波,方波)的直线,那也很好。 更新:每个人的答案都非常有帮助,我有一个后续问题。 将添加到三角波函数中以使线的斜度像这样弯曲或弯曲的是什么: 谢谢大家,您各种各样的答案帮助我从更大的角度看问题。特别感谢Noldorin将方程式扩展到二次曲线的方法。
70 c 


3
Arduino使用C还是C ++?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 从Python来的,整个C / C ++都是以异类开头的……然后我在一个地方看到Arduino使用“标准” C,在另一个地方看到它使用“标准” C ++,依此类推。向前。哪有 我对这两者之间的区别的粗略理解是,C ++(大致)是带有类/对象的C。我应该集中精力学习主要用于Arduino的语言或方言(C或C ++)如何受到影响?
70 c++  c  arduino 

5
当空指针不全为零时如何正确编写C / C ++代码
正如comp.lang.c常见问题解答所说,在某些体系结构中,空指针并非全为零。所以问题是什么实际上检查以下构造: void* p = get_some_pointer(); if (!p) return; 我是在p与机器相关的空指针进行比较p,还是在与算术零进行比较? 我应该写 void* p = get_some_pointer(); if (NULL == p) return; 而是为这种架构做好准备,还是只是我的偏执?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.