C++ 尝试在纯c中编程arduino时,出现以下错误:预期为'='''''';asm&x27;或'__属性';在'之前;打印'|

C++ 尝试在纯c中编程arduino时,出现以下错误:预期为'='''''';asm&x27;或'__属性';在'之前;打印'|,c++,c,arduino,codeblocks,arduino-uno,C++,C,Arduino,Codeblocks,Arduino Uno,我在ArduinoIDE中编写了一个程序(它涉及一些矩阵数学)。但是,我想使用一些编译器选项。这似乎不是一个简单的方法,所以我转而尝试使用代码块编写纯c程序。我让blink示例正常工作,但我想利用串行库。我只是找到了h和cpp文件,并将它们复制到包含主.c文件的文件夹中。(我不知道这样做是否正确) 现在我得到一条错误消息: Print.h | 37 |错误:应为“=”,“,”,“;”,”“打印”之前的asm“或”属性| 它抱怨的代码是我复制的标准类之一 /* Print.h - Base c

我在ArduinoIDE中编写了一个程序(它涉及一些矩阵数学)。但是,我想使用一些编译器选项。这似乎不是一个简单的方法,所以我转而尝试使用代码块编写纯c程序。我让blink示例正常工作,但我想利用串行库。我只是找到了h和cpp文件,并将它们复制到包含主.c文件的文件夹中。(我不知道这样做是否正确)

现在我得到一条错误消息: Print.h | 37 |错误:应为“=”,“,”,“;”,”“打印”之前的asm“或”属性|

它抱怨的代码是我复制的标准类之一

/*
  Print.h - Base class that provides print() and println()
  Copyright (c) 2008 David A. Mellis.  All right reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#ifndef Print_h
#define Print_h

#include <inttypes.h>
#include <stdio.h> // for size_t

#include "WString.h"


#define DEC 10
#define HEX 16
#define OCT 8
#ifdef BIN // Prevent warnings if BIN is previously defined in "iotnx4.h" or similar
#undef BIN
#endif
#define BIN 2

class Print
{
  private:
    int write_error;
    size_t printNumber(unsigned long, uint8_t);
    size_t printFloat(double, uint8_t);
  protected:
    void setWriteError(int err = 1) { write_error = err; }
  public:
    Print() : write_error(0) {}

    int getWriteError() { return write_error; }
    void clearWriteError() { setWriteError(0); }

    virtual size_t write(uint8_t) = 0;
    size_t write(const char *str) {
      if (str == NULL) return 0;
      return write((const uint8_t *)str, strlen(str));
    }
    virtual size_t write(const uint8_t *buffer, size_t size);
    size_t write(const char *buffer, size_t size) {
      return write((const uint8_t *)buffer, size);
    }

    // default to zero, meaning "a single write may block"
    // should be overriden by subclasses with buffering
    virtual int availableForWrite() { return 0; }

    size_t print(const __FlashStringHelper *);
    size_t print(const String &);
    size_t print(const char[]);
    size_t print(char);
    size_t print(unsigned char, int = DEC);
    size_t print(int, int = DEC);
    size_t print(unsigned int, int = DEC);
    size_t print(long, int = DEC);
    size_t print(unsigned long, int = DEC);
    size_t print(double, int = 2);
    size_t print(const Printable&);

    size_t println(const __FlashStringHelper *);
    size_t println(const String &s);
    size_t println(const char[]);
    size_t println(char);
    size_t println(unsigned char, int = DEC);
    size_t println(int, int = DEC);
    size_t println(unsigned int, int = DEC);
    size_t println(long, int = DEC);
    size_t println(unsigned long, int = DEC);
    size_t println(double, int = 2);
    size_t println(const Printable&);
    size_t println(void);

    virtual void flush() { /* Empty implementation for backward compatibility */ }
};

#endif
/*
h-提供Print()和println()的基类
版权所有(c)2008 David A.Mellis。保留所有权利。
这个图书馆是免费软件;您可以重新分发它和/或
根据GNU小公众的条款对其进行修改
自由软件基金会发布的许可证;任何一个
许可证的2.1版,或(由您选择)任何更高版本。
这个图书馆的发行是希望它会有用,
但无任何保证;甚至没有任何关于
适销性或适合某一特定目的。见GNU
有关更多详细信息,请参阅较低的通用公共许可证。
您应该已经收到GNU Lesser General Public的副本
与此库一起使用的许可证;如果没有,请写信给自由软件
基金会,51富兰克林ST,第五楼,波士顿,美国02110-1301
*/
#ifndef打印
#定义打印
#包括
#包括//用于尺寸\u t
#包括“WString.h”
#定义12月10日
#定义十六进制
#定义10月8日
#ifdef BIN//如果BIN先前在“iotnx4.h”或类似文件中定义,则防止出现警告
#未定义垃圾箱
#恩迪夫
#定义存储箱2
类打印
{
私人:
int写入错误;
尺寸打印号(无符号长,uint8);
打印浮点数的大小(双精度,uint8);
受保护的:
void setWriteError(int err=1){write_error=err;}
公众:
Print():写入错误(0){
int getWriteError(){return write_error;}
void clearWriteError(){setWriteError(0);}
虚拟大小写入(uint8\u t)=0;
写入大小(常量字符*str){
if(str==NULL)返回0;
返回写入((const uint8_t*)str,strlen(str));
}
虚拟大小写入(常量8*buffer,大小大小);
大小写入(常量字符*缓冲区,大小){
返回写入((const uint8_t*)缓冲区,大小;
}
//默认为零,表示“一次写入可能会阻塞”
//应该由具有缓冲的子类重写
virtual int availableForWrite(){return 0;}
大小打印(常量FlashStringHelper*);
大小打印(常量字符串&);
大小打印(常量字符[]);
打印尺寸(字符);
打印大小(无符号字符,整数=小数);
打印尺寸(整数,整数=DEC);
打印尺寸(无符号整数,整数=DEC);
打印尺寸(长,整数=12);
打印尺寸(无符号长,整数=DEC);
打印尺寸(双精度,整数=2);
尺寸打印(常量可打印);
大小打印LN(常量FlashStringHelper*);
大小\u t println(常量字符串和s);
大小_t println(常量字符[]);
打印的大小(字符);
大小\u t println(无符号字符,int=DEC);
尺寸(整数,整数=DEC);
大小\u t println(无符号整数,整数=DEC);
尺寸(长,整数=12);
大小\u t println(无符号长,int=DEC);
尺寸(双精度,整数=2);
尺寸(常量可打印);
打印尺寸(空);
虚拟void flush(){/*向后兼容的空实现*/}
};
#恩迪夫

我怀疑是因为编译器把代码当作C代码,而C++代码。我使用GNU AVR GCC编译器,它应该能够同时做C和C++代码。我需要添加一些东西到我的头上,以指示它涉及C++代码吗?

> P>类是C++特性,在C中不存在,所以C编译器正确地给它们一个错误,因为您尝试使用“纯C”。虽然这个错误有点让人困惑,但它的意思是,

class
在C中不是一个关键字,所以它认为它是一个标识符,并且对在一行中看到两个标识符感到困惑。

“尝试用纯C编写arduino…”“
C
!”<代码> C++ +>代码>为什么C++标签?因为我认为问题是由C++库引起的。我想也许我不应该把它称为纯C,但它意味着与ARDUINO IDE使用的“改进C”形成对比。如果包含一个包含C++代码的头,就必须使用C++编译器,并指示您希望通过将文件命名为C++,或者将文件命名为扩展名。将main.c重命名为main.cpp将main.c更改为main.cpp确实有效,谢谢!没有想到这一点,我现在觉得有点傻。我记得在使用C++类时,必须向导入语句添加一些关键字,不知怎么的,我脑子里的想法是一样的。