Questions tagged «c»

C是用于操作系统,游戏和其他高性能工作的通用计算机编程语言。

11
您处理过空间强化了吗?
我非常渴望学习有关空间硬化的最佳实践。例如,我已经读到(尽管我再也找不到该文章了)火星漫游者的某些核心部分没有使用动态内存分配,实际上这是被禁止的。我还读到老式的核心内存在空间上可能更可取。 我当时在研究与Google Lunar Challenge相关的一些项目,想知道将代码登上月球甚至进入太空的感觉如何。我知道在这样恶劣的环境下,空间加固板可以提供一些理智,但是我想知道(作为C程序员)如果我要编写可以在空间中运行的东西,我该如何调整思维和代码? 我认为未来几年私人太空公司可能会显示出更多的增长,我真的希望至少对最佳实践有所了解。 如果辐射,冷或热轰击了一块对其绝缘造成破坏的电路板,该程序会怎样?我认为目标是将人类留在航天器内(就固定或交换东西而言),避免执行固定任务。 此外,如果董事会维护一些关键系统,则预警似乎至关重要。 一个人如何通过测试和反复试验获得经验(除非发射自己的个人卫星?)
62 c  memory 

10
仅将C ++编译器用于函数重载是不好的做法吗?
因此,我正在针对某个处理器使用C进行软件设计。该工具包包括编译C和C ++的功能。对于我正在做的事情,在这种环境下没有可用的动态内存分配,并且该程序总体上非常简单。更不用说该设备几乎没有处理器能力或资源。实际上,根本不需要使用任何C ++。 话虽这么说,我在一些地方进行函数重载(C ++的功能)。我需要发送几种不同类型的数据,并且不想使用printf带有某种%s(或其他任何一种)参数的样式格式。我见过有些人无法使用C ++编译器执行此操作printf,但就我而言,可以使用C ++支持。 现在,我确定可能会遇到一个问题,即为什么我需要重载一个函数。因此,我将尝试立即回答。我需要从串行端口传输不同类型的数据,所以我有一些重载,可以传输以下数据类型: unsigned char* const char* unsigned char const char 我只希望没有一种方法可以处理所有这些事情。当我呼吁我只是希望它传递出串行端口的功能,我没有很多资源的,所以我不想做几乎没有任何事情,但我的传送。 有人看到了我的程序,问我:“为什么要使用CPP文件?” 所以,这是我唯一的原因。那是不好的做法吗? 更新资料 我想回答一些问题: 解决您的困境的客观答案取决于: 如果使用C ++,可执行文件的大小是否会显着增加。 截至目前,可执行文件的大小占用了4.0%的程序内存(5248字节)和8.3%的数据内存(342字节)。也就是说,为C ++编译...我不知道对于C会是什么样子,因为我没有使用过C编译器。我确实知道该程序不会再增长了,所以对于资源的有限程度,我会说我还可以... 如果使用C ++,是否会对性能产生明显的负面影响。 好吧,如果有的话,我什么都没注意到...但是那又可能是为什么我问这个问题的原因,因为我不太了解。 代码是否可以在只有C编译器可用的其他平台上重用。 我知道,对此的答案肯定不是。实际上,我们正在考虑使用其他处理器,但仅考虑使用功能更强大的基于ARM的处理器(事实上,我所知道的所有处理器都具有C ++编译器工具链)。

7
是否应该检查C中的每个小错误?
作为一名优秀的程序员,应该编写能处理其程序每个结果的强大代码。但是,当发生错误时,C库中的几乎所有函数都将返回0或-1或NULL。 有时很明显,需要进行错误检查,例如,当您尝试打开文件时。但是我经常忽略诸如printf或什至malloc因为我认为没有必要而进行错误检查。 if(fprintf(stderr, "%s", errMsg) < 0){ perror("An error occurred while displaying the previous error."); exit(1); } 仅忽略某些错误是一种好习惯,还是有一种更好的方法来处理所有错误?
60 c  error-handling 

8
为什么C在C ++不足的地方提供语言“绑定”?
我最近想知道何时在C ++上使用C,反之亦然?幸运的是,有人已经击败了我,尽管花了一段时间,但我能够消化该问题的所有答案和评论。 但是,该帖子中的一个项目一直不断地被处理,而没有任何示例,验证或解释: “当您想为库提供多种语言绑定时,C代码非常有用” 这是一个释义。我应该指出,有几个人指出,C ++可以通过某种extern功能实现多种语言绑定,但是,如果您完整阅读该文章,则很明显C是可移植性/语言绑定的理想之选。我的问题是:为什么? 有人可以提供一些具体的原因,为什么用C编写库可以简化其他语言的绑定和/或可移植性?

13
未定义行为背后的哲学
C \ C ++规范为编译器以自己的方式实现提供了许多开放的行为。这里经常有很多问题被问到同样的问题,并且我们有一些很好的帖子: https://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviour-that-ac-programmer-should-know-abo https://stackoverflow.com/questions/4105120/what-is-undefined-behavior https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points 我的问题不是关于不确定行为是什么,还是真的不好。我确实知道该标准的危险和大多数相关的未定义行为引用,因此请不要发布有关该标准有多严重的答案。这个问题是关于为编译器实现留出许多行为的背后的哲学。 我读了一篇很棒的博客文章,指出性能是主要原因。我想知道性能是否是允许它的唯一标准,或者是否有其他因素会影响将事情开放给编译器实现的决定? 如果您有任何示例可以引用某个特定的未定义行为为编译器提供足够的优化空间,请列出它们。如果您知道性能以外的其他因素,请提供足够详细的答案。 如果您不理解该问题或没有足够的证据/来源来支持您的答案,请不要发布广泛猜测的答案。

12
这是C语言中goto的一个不错的用例吗?
我真的很犹豫要问这个问题,因为我不想“征求辩论,争论,民意测验或扩展讨论”,但是我是C语言的新手,并且希望对语言使用的常见模式有更多了解。 我最近听到对该goto命令有些反感,但最近也发现了一个不错的用例。 像这样的代码: error = function_that_could_fail_1(); if (!error) { error = function_that_could_fail_2(); if (!error) { error = function_that_could_fail_3(); ...to the n-th tab level! } else { // deal with error, clean up, and return error code } } else { // deal with error, clean up, and return error code …

4
何时以及出于什么目的在C中将const关键字用于变量?
在这里审核我的代码时,const出现了使用关键字的问题。我了解它用于对变量执行只读行为。 我对它可能有用时的各种情况感到困惑。 是否应该在功能原型中为了清楚起见使用它? 在代码开发期间是否应将其用作安全措施? 是否应该在各种函数的范围内使用它们来声明运行时常量? 应该完全使用吗? 这些问题仅仅是我所面临的困惑的例子。一般的困惑是 什么时候const在C编程中使用关键字? 在C语言中使用此关键字可以获得哪些好处? 使用const关键字有什么弊端吗? 有人指出,由于所有这些问题,在我的问题的细节中,这个问题可能太广泛了。我只是想澄清这些问题只是为了澄清对主要问题的困惑。 何时以及出于什么目的在C中将const关键字用于变量? 也可以改写为 const在C`中正确使用关键字具有相同的优缺点。

15
我不认识C。为什么我应该学习它?[关闭]
我的第一种编程语言是PHP(gasp)。之后,我开始使用JavaScript。我最近在C#中完成工作。 我从来没有看过像C这样的中低级语言。 大型编程社区的普遍共识是:“坦率地说,没有学习C之类的程序员,就无法处理诸如指针,数据类型,通过引用传递值等编程概念。” 我不同意。我认为: 由于高级语言易于访问,因此更多的“非程序员”陷入困境 为了真正用高级语言完成所有工作,需要理解大多数“学习低级优先”的拥护者都宣扬的相同概念。 有些人需要了解C。这些人的工作要求他们编写低至中级代码。我确定C很棒,而且我确定有一些懂C的坏程序员。 为什么会有偏见?作为一个优秀,诚实,饥饿的程序员,如果我不得不学习C(出于某些不可预见的原因),我将学习C。考虑到那里的多种语言,好的程序员是否应该专注于学习什么能促进我们的发展?我们不应该学习我们感兴趣的东西吗?我们不应该利用有限的时间前进吗?为什么有些程序员不同意这一点? 我相信在工作上追求卓越是优秀程序员和劣质程序员之间的基本确定性特征。 在现实世界中,有没有人举例说明过用高级语言(例如Java,Pascal,PHP或JavaScript)编写的东西如何真正受益于C的先验知识?实例将是最大的赞赏。

15
为什么我们有后缀增量?
免责声明:我完全清楚前缀和后缀增量的语义。因此,请不要向我解释它们的工作原理。 阅读有关堆栈溢出的问题,我不禁注意到程序员一遍又一遍地被后缀增量运算符弄糊涂了。由此产生以下问题:是否存在用例后缀增量在代码质量方面真正受益的用例? 让我用一个例子来澄清我的问题。这是以下内容的超级简洁实现strcpy: while (*dst++ = *src++); 但这并不是我书中最能自我记录的代码(它会在理智的编译器上产生两个烦人的警告)。那么以下替代方案有什么问题呢? while (*dst = *src) { ++src; ++dst; } 然后,我们可以摆脱条件中令人困惑的分配,并获得完全无警告的代码: while (*src != '\0') { *dst = *src; ++src; ++dst; } *dst = '\0'; (是的,我知道,src并且dst在这些替代解决方案中将具有不同的结束值,但是由于strcpy在循环之后立即返回,因此在这种情况下无关紧要。) 后缀增加的目的似乎是使代码尽可能简洁。我只是看不到我们应该如何努力。如果这最初是关于性能的,那么今天它仍然有意义吗?
55 c++  c  postfix 

8
C ++中的垃圾会发生什么?
Java有一个自动GC,它偶尔会停止世界,但会处理堆上的垃圾。现在C / C ++应用程序没有这些STW冻结,它们的内存使用也不会无限增长。如何实现这种行为?如何处理死物?

5
从C内部调用shell命令是一个好主意吗?
udevadm info -q path -n /dev/ttyUSB2我想从C程序中调用一个unix shell命令()。经过大约一周的努力,我可以自己重新实施它,但是我不想这样做。 我打电话popen("my_command", "r");还是被广泛接受的优良作法,还是会引入不可接受的安全性问题并转发兼容性问题?做这样的事情对我来说是错误的,但是我不能指责为什么会不好。
50 c  unix  shell 

6
为什么许多在C中返回结构的函数实际上返回结构的指针?
return与在函数的语句中返回整个结构相比,返回指向结构的指针有什么好处? 我说的是像fopen其他底层函数一样的函数,但是可能还有一些高层函数也返回指向结构的指针。 我相信这更多是一种设计选择,而不仅仅是编程问题,而且我很想知道更多关于这两种方法的优缺点。 我认为返回指向结构的指针的一个好处的原因之一是能够通过返回NULL指针更容易地判断函数是否失败。 我想返回一个完整的结构NULL会比较困难,或者效率较低。这是正当的理由吗?

2
仅标头库更有效吗?
假设条件 C ++的仅标头库的优点之一是它们不需要单独编译。 inline仅当函数在头文件*中定义时,在C和C ++中才有意义。 传统上,在C中,使用.c / .h布局,其中标头代表翻译单元的最小公共接口。同样,.cpp / hpp。 题 仅标头库通常比传统布局在代码和执行时间上更有效吗?如果是这样,是否是因为进行了广泛的内联或其他优化? *-在标头中定义函数使编译器可以在编译任何翻译单元时查看实现,并且实际上使内联代码成为可能
48 c++  c  libraries 


3
使用C和C ++进行Android开发[关闭]
我是C,C ++开发人员。我对移动开发感兴趣。我想知道如何使用C和C ++开发Android应用程序,我已经读到它们为C,C ++开发人员提供了一个工具包,但是它不具备Java工具包的所有功能。我应该选择C / C ++开发套件还是最好学习Java,因为它们将来可能无法提供所有功能?
47 c++  c  android 

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.