草庐IT

c++ - 对于实时应用程序,C 和 C++ 哪个更好?

我是一名电子工程师,具有C和C++两种语言的经验(我用C编写微Controller,用C++我用BorlandC++Builder为Windows编写)我的公司开发电机控制产品,我们正在使用STM32和IAR编译器。我认识到语言之间的技术差异,我对开发成本和代码维护成本感兴趣:写C++代码的开发时间比C长吗?C++代码的维护成本是否比C便宜?(我知道代码总是会发生变化)用C++和C编写代码文档容易吗?(描述代码如何工作的文档) 最佳答案 这是非常主观的。我个人认为,在开发时间和维护方面,使用C++进行开发的成本更低,尤其是对于大型、

c++ - strcpy 中的段错误

考虑下面的程序charstr[5];strcpy(str,"Hello12345678");printf("%s",str);当运行这个程序时出现段错误。但是当strcpy替换为以下内容时,程序运行正常。strcpy(str,"Hello1234567");所以问题是,当尝试将长度超过5个字符的任何其他字符串复制到str时,它应该会崩溃。那么为什么它不会因为“Hello1234567”而崩溃而只会因为“Hello12345678”而崩溃,即长度为13或超过13的字符串。这个程序是在32位机器上运行的。 最佳答案 您应该对三种类型的标

c++ - 从 RGB 值数组中切出平面(就地)的算法

我有一个字节RGB值的平面数组,它是R1G1B1R2G2B2R3G3B3...RnGnBn。所以我的数据看起来像:charimageData[WIDTH*HEIGHT*3];但我想将WIDTH*HEIGHT数组传递给现有的C库,该库需要此数据的单个平面。那将是一个仅包含R值(或仅是G,或仅是B)的序列。分配新数组和复制数据非常简单(呃)。但是图像非常大。如果它不是C库而是采用某种迭代接口(interface)来巧妙地进行“切片”遍历,那就太好了。但是我无法编辑正在调用的代码...它需要一个指向顺序内存块的普通旧指针。但是我有这个数组的写权限。创建一个将其分类为颜色平面的例程是可行的。我

c++ - 在 C switch/case 中声明变量

好吧,这实际上不是问题..我只是偶尔发现有一种有趣的方法可以在switch/caseblock中声明局部变量。你可以这样写:switch(action){intres;intvalue;caseACTION_OPEN:res=open(...);...break;case...}所以,我只是想知道除了gcc之外还有哪些C/C++编译器支持这种构造?它看起来像一个常见的失败。欢迎对此结构提出任何意见! 最佳答案 switch主体只是一个普通语句(在您的例子中是一个复合语句,看起来像{...}),它可以包含任何废话。包括外壳标签。Duf

c++ - 用 C 和 C++ 最快的输出到文件

我正在帮助某人解决有关用C输出的问题,但我无法回答这个看似简单的问题,我想使用答案(在我的回答中),即:用C/C++输出到文件的最快方法是什么?我使用C++和Java做了很多关于素数生成和数学算法优化的工作,这有时对我来说是最大的阻碍-我有时需要快速地将大量内容移动到文件中。请原谅我是否已经回答了这个问题,但我已经在谷歌和SO上寻找了一段时间但无济于事。我不希望有人做基准测试的工作-但有几种方法可以归档,我怀疑我是否了解所有方法。总结一下,C、C++输出到文件的方式有哪些?哪些是更快的?显然,从控制台重定向很糟糕。printf、cout、fputc等的任何简要比较都会有所帮助。编辑:来

c++ - fatal error : 'stdafx.h' file not found

我是C++编程的新手,我正在尝试通过网站(learncpp.com)学习自己,尽管我已经坚持编译我的第一个程序=(。他们使用VisualStudio来编写他们的代码,因为我使用的是macbook,我只使用vi和终端(或者我应该使用其他东西吗?)下面是我根据教程写的helloworld.cpp程序:#include"stdafx.h"#include{std::cout当我编译(gcc-Wallhello.cpp)时出现错误:helloworld.cpp:1:10:fatalerror:'stdafx.h'filenotfound#include"stdafx.h"^1errorgene

c++ - 如果没有嵌套,说服同事

我的一位大学同事,今年开始编程,有时会写这样的if语句:if(something)doA();elseif(something2)doC();elsedoD();他确信第二对if-else被视为单个实体,并且它实际上嵌套在第一对else下。但是,我确定他的代码等同于:if(something)doA();elseif(something2)doC();elsedoD();这表明第二个else实际上并没有嵌套,而是与第一个if在同一层级。我告诉他他需要使用花括号来实现他想要的。“但我的代码按预期工作!”事实上,它按预期工作。事实证明代码的行为是相同的,即使else没有被嵌套。令人惊讶的是

C++ 代码和来自 C 的对象?

是否有直接从C中使用C++对象的简单方法?我想将一些类从C++公开到C或FFI(外部函数接口(interface))。当然,我可以写这样的东西:classFoo{....};void*make_foo(...){Foo*ptr=newFoo(..)returnstatic_cast(ptr);}..int*foo_method1(void*fooptr,...){Foo*ptr=static_cast(fooptr);}但是有更简单的方法吗? 最佳答案 一般来说,这是最简单的方法。还要记住,您还需要在所有C“包装器”方法上使用ext

C++ 写 'or' 而不是 ||

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C++alternativetokens?我正在和我的一个friend一起完成一项C++作业,我们一直在他的计算机/环境(带有Eclipse的MacbookPro)上进行大量编码。在某些代码中,他使用and和or而不是&&和||来编写条件。代码在他的计算机上编译得很好,但是当我尝试在家里的计算机(装有VisualStudio2010的PC)上编译它时,我遇到编译器错误并被迫切换它们。我的friend还证明这种语法在Linux环境中使用emacs/g++时有效。我以前从未见过这种类型的东西。这是否被广泛使用或被

c++ - 睡了一个确切的时间

我对Sleep函数的理解是它遵循“至少语义”,即sleep(5)将保证线程休眠5秒,但它可能会保持阻塞超过5秒,具体取决于其他因素。有没有办法在指定的时间段内休眠(无需忙等待)。 最佳答案 正如其他人所说,您确实需要使用实时操作系统来尝试实现这一目标。精确的软件计时非常棘手。然而...虽然并不完美,通过简单地提高需要更好时机的进程的优先级,您可以获得比“正常”更好的结果。在Windows中,您可以使用SetPriorityClass实现此目的功能。如果您将优先级设置为最高级别(REALTIME_PRIORITY_CLASS:0x00