Questions tagged «c»

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

3
我可以使用哪个预定义的宏来检测clang?
我正在尝试检测用于编译我的源代码的编译器。我可以轻松地找到预定义的宏来检查MSVC或GCC(例如,请参阅http://predef.sourceforge.net/),但是我找不到任何要检查clang的宏。 有人知道clang是否定义了一个宏__CLANG__,以便知道当前正在编译我的代码吗?


8
为什么c = ++(a + b)给出编译错误?
经过研究,我了解到增量运算符要求操作数具有可修改的数据对象:https : //en.wikipedia.org/wiki/Increment_and_decrement_operators。 由此我猜想它会产生编译错误,因为它(a+b)是一个临时整数,因此不可修改。 这种理解正确吗?这是我第一次尝试研究问题,因此,如果有什么我应该寻找的,请提出建议。
111 c  increment 

20
如何在旧台式计算机上构建小型操作系统?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 改善这个问题 这可能是徒劳的,因为我知道编写操作系统非常复杂(尤其是自己编写)。 我不希望构建下一个Linux或Windows。 我知道这将是可怕的,有故障的,并且无法正常工作,但这很好。 我想用Assembly,C和(某些)C ++自己编写所有内容。 这是一个未来的项目,因为我目前正忙于其他事情,没有时间,但我想现在就问一下,也许我可以获得很多答案,并且可以建立并成为这种方法的有用资源(我所看到的所有其他内容都涉及建立minix,使用现有的bootloader,在虚拟启动程序中构建它等)。 我想用显示器,键盘和鼠标设置一个较旧的台式机,然后开始在空白硬盘驱动器上工作。 我想学习如何编写自己的引导加载程序(我已经找到了很多相关的资源,但是为了完整起见,请仍然添加一些不错的资源),我自己的USB驱动程序(如果需要),CD驱动程序(如果需要) )等所有内容,从头开始。 如何将代码放入计算机?最好用软盘来做吗?大多数计算机可以通过USB记忆棒来做到吗? 我需要什么驱动程序,您可以建议任何有关构建这些驱动程序的参考吗? 在启动序列之后-那么呢?我如何进入保护模式等 我如何在没有操作系统帮助的情况下管理内存?我是否只使用我想要的地址?不需要初始化吗? 我无疑会遇到什么使我感到困惑? 如何使其成为命令行操作系统和图形操作系统? 什么是图形化的操作系统?就像,我该如何做,例如命令行,字体和顶部的图片? 在哪里可以阅读有关设置多任务环境的信息?(即,具有两个并排运行的图形化命令行)。 我将如何建立一种窗口系统?设置简单的多任务处理后,如何在屏幕上显示图形? 相信我,我知道这是一个非常复杂的项目,并且我可能永远也无法完成或编写任何有用的内容。 我还没有提到很多其他内容,如果您有任何想法,也可以随意添加。 请为每个答案输入一个“主题”,例如USB驱动程序,然后列出资源,需要注意的事项等。 另外,请不要建议构建其他操作系统或预先存在的代码。我知道我将阅读很多预先存在的代码(例如linux内核或示例资源,现有驱动程序等),但最终我想自己完成所有编写工作。我知道我应该在其他基础上发展,因此,如果我改变主意并走这条路,那么我可以阅读很多其他问题。但是,这一切都是关于从头开始做整个事情。 关于如何使其图形化的任何建议?不同的视频模式以及如何使用它们等?

8
是否有具有通用数据结构的开源C库?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我正在寻找具有常见可重用数据结构(如链表,哈希表等)的C库。类似Kyle Loudon的C(平装)母版分发算法的源代码。
111 c  data-structures 

13
有C的翻译器吗?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 2年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我想知道是否有类似C的解释器。也就是说,在Linux终端中,我可以输入“ python”,然后在该解释器中进行编码。(我不确定解释正确的词)。这对于测试不同的东西真的很有帮助,我很好奇C是否存在类似的东西。尽管我对此表示怀疑。我唯一能想到的就是C shell ...

8
“结构骇客”在技术上是不确定的行为吗?
我要问的是众所周知的“结构的最后一个成员具有可变长度”的技巧。它是这样的: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; strcpy(p->s, "hello world"); 由于结构在内存中的布局方式,我们能够将结构覆盖在大于必要的块上,并将最后一个成员视为大于1 char指定的成员。 所以问题是:这项技术在技术上是否是未定义的行为?。我希望是这样,但是很好奇标准对此表示了什么。 PS:我知道使用C99的方法,我希望答案特别遵循上面列出的技巧。




3
分配二维数组的怪异方法?
在一个项目中,有人推这条线: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); 据推测会创建一个(n + 1)*(n + 1)个double的二维数组。 按说,我说,因为到目前为止,没有人问我能告诉我这是什么呢,正好,也不在那里它源自或者为什么它应该工作(据称,这样做,但我还没有买的话)。 也许我缺少明显的东西,但是如果有人可以向我解释以上内容,我将不胜感激。因为就我个人而言,如果我们使用实际理解的东西会感觉好很多。

3
为什么只有注释更改的两个程序二进制文件在gcc中不完全匹配?
我创建了两个C程序 程序1 int main() { } 程序2 int main() { //Some Harmless comments } AFAIK,在编译时,编译器(gcc)应该忽略注释和多余的白点,因此输出必须相似。 但是,当我检查输出二进制文件的md5sums时,它们不匹配。我也试图与优化的编译-O3和-Ofast,但他们仍然不匹配。 这是怎么回事 编辑:确切的命令和md5sums是(t1.c是程序1和t2.c是程序2) gcc ./t1.c -o aaa gcc ./t2.c -o bbb 98c1a86e593fd0181383662e68bac22f aaa c10293cbe6031b13dc6244d01b4d2793 bbb gcc ./t2.c -Ofast -o bbb gcc ./t1.c -Ofast -o aaa 2f65a6d5bc9bf1351bdd6919a766fa10 aaa c0bee139c47183ce62e10c3dbc13c614 bbb gcc ./t1.c -O3 -o aaa gcc …

30
在C / C ++中,最简单的方法来反转字节中的位顺序?
尽管有多种方法可以反转字节中的位顺序,但我对开发人员实现“最简单”的方法感到好奇。通过反转,我的意思是: 1110 -> 0111 0010 -> 0100 这类似于但不重复此 PHP问题。 这类似于但不是此 C问题的重复项。这个问题要求开发人员最简单的方法来实施。“最佳算法”与内存和CPU性能有关。
110 c++  c  bit-manipulation 

11
如何使用GCC和ld删除未使用的C / C ++符号?
我需要严格优化可执行文件的大小(ARM开发),并且我注意到在我当前的构建方案(gcc+ ld)中,未使用的符号没有被剥离。 arm-strip --strip-unneeded所产生的可执行文件/库的用法不会更改可执行文件的输出大小(我不知道为什么,也许根本无法更改)。 修改我的构建管道的方式(如果存在)是什么,以便从生成的文件中删除未使用的符号? 我什至不会想到这一点,但是我当前的嵌入式环境不是非常“强大”,并且甚至节省500K了2M结果,从而极大地提高了加载性能。 更新: 不幸的是,目前的gcc版本我使用不具备-dead-strip选项和-ffunction-sections... + --gc-sections用于ld没有给出结果输出任何显著差异。 我感到震惊的是,这甚至成为了问题,因为我确定gcc + ld应该自动剥离未使用的符号(为什么还要保留它们?)。
110 c++  c  gcc  ld  strip 


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.