Arduino使用C还是C ++?[关闭]


70

从Python来的,整个C / C ++都是以异类开头的……然后我在一个地方看到Arduino使用“标准” C,在另一个地方看到它使用“标准” C ++,依此类推。向前。哪有 我对这两者之间的区别的粗略理解是,C ++(大致)是带有类/对象的C。我应该集中精力学习主要用于Arduino的语言或方言(C或C ++)如何受到影响?


7
Arduino是一个硬件平台,而不是软件,您的问题令人困惑。
user827992

9
你的前提是错的。C ++不是带有类的C语言。这就是C ++的开始方式(它最初被命名为“带有类的C”,是的)。但是说现代C ++是C语言就像说python是bash方言一样(大概)。
bitmask 2012年

4
建议的编辑:作者注:如果您想重新打开问题,请随意使用或修改。主题是一个值得探讨的话题:有关Arduino的各种文章和文档指出,这些草图(程序)是用C或C ++,C / C ++或Arduino编写的,并引用了Arduino语言的衍生方式,以及类似于“接线”。C,C ++和使用Arduino IDE为Arduino编写的代码之间的关系是什么?C和/或C ++与使用Arduino IDE编写的代码之间有什么区别和“陷阱”?
ViennaMike 2014年

6
不确定我是否理解强烈的愿望,有些人不得不重新措辞我认为是原版海报所表达的问题的语言,就像原始海报那样。考虑到问题已经收到的点击数和投票数,看来很多读者都同意。请停止编辑我的问题;您设法将我的要求完全转变为其他要求。
memilanuk'2

18
这个问题被关闭绝对是荒谬的。这是一个很好的问题。诸如“这是一个硬件平台,它运行机器代码”之类的回答会故意遗忘Arduino IDE(一种用于Arduino编程的事实上的工具),非常清楚OP所指的是什么,显然响应者会知道。在答案中有帮助和建设性地指出这一点很容易。
约翰·

Answers:


82

Arduino草图是用C ++编写的。

这是您将遇到的典型构造:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
...
lcd.begin(16, 2);
lcd.print("Hello, World!");

那是C ++,不是C。

因此,请帮自己一个忙,学习C ++。有大量的书籍和在线资源。


1
谢谢。这回答了每个人通常都想到的更通用的问题。通常写在什么地方的草图是什么?
gideon 2014年

3
不要从StackOverflow指示的Lipmann书中学习C ++。这是一场教学灾难。请改用Accelerated C ++。更短,更人性化
user5193682 '16

20

两者都受支持。要引用Arduino主页

核心库使用C和C ++编写,并使用avr-gcc进行编译

请注意,C ++是C的超集(很好,几乎是),因此通常看起来非常相似。我不是专家,但是我想您第一年在该平台上为Arduino编程的大部分内容都不需要,只需要纯C语言即可。


4
实际上,C几乎是C ++的子集。但是,非劣质的C代码看起来与非劣质的C ++代码非常不同。

没错,但是非卑鄙的C代码将作为C ++编译(并且非C ++的C程序是卑鄙的)。当然,良好的C ++代码不会人为地和任意地将其自身限制于C.
tiwo

12
仍然没有。例如,不应返回值malloc强制转换为C,但在C ++中则必须使用。现在,允许C ++链接和与C代码交互是很棒的,但是为此,您最需要避免使用一些保留字,并extern "C" 在header中添加条件(预处理器)。不过,这是完全不同的。另外,还有很多可爱的C99和C11功能,而C ++不支持。为什么好的C代码会人为地将自身限制为C ++的子集?

2
@tiwo非劣质的C代码绝对不能使用C ++编译器进行编译。例如,无论何时使用可变长度数组,它都不会编译。或者无论何时使用结构文字
fuz

-12

Arduino不运行C或C ++。它运行从C,C ++或任何其他具有Arduino指令集编译器的语言编译的机器代码。

C是C ++的子集,如果Arduino可以“运行” C ++,那么它就可以“运行”C。

如果您既不了解C也不了解C ++,则可能应该以C开头,以习惯于整个“指针”。但是,您将失去所有的对象继承功能。


90
拳头:C不是C ++的子集。第二:如果您想学习C ++,那么学习C并不是一件非常有用的事情。实际上,它甚至适得其反,正是因为您习惯了“整个指针”。
bitmask 2012年

4
当然,立即学习C ++并不会使您摆脱将C ++与C-isms混合在一起,无视现代C ++的一半,或者只是编写完全破碎的代码(这两种语言都不可接受)的无数资源和误导之心。

21
我不敢 Arduino不仅仅是硬件-它们还分发IDE,编译器(avr-gcc)和核心库。毫无疑问,Arduino是使用C / C ++编程的。
tiwo 2012年

2
甚至比这更令人困惑:Arduino.app用Java编写,C和C ++的核心库,草图中使用的语言看起来像C ++,但是表现得更像Javascript。
Elise van Looij 2015年

1
Arduino指令集?ATMega指令集还可以。Arduino根本不是微控制器。
DawidPi 2015年
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.