2013-08-10 42 views
7

Bản phác thảo sau đây không biên dịch được trong môi trường Arduino.Tại sao tôi không thể truyền typedef hoặc enum trong Arduino?

Cho rằng typedefs can be used within Arduino software, là Tự động tạo mẫu thử nghiệm cơ chế cơ bản gây ra lỗi? Nếu vậy, nó là gì và tại sao không phải là Arduino cung cấp một wrapper nhẹ xung quanh C + +?

#define PRODUCE_WACKY_COMPILETIME_ERROR 
typedef int MyMeaningfulType; 

#ifndef PRODUCE_WACKY_COMPILETIME_ERROR 
void myFunc(MyMeaningfulType myParam); 
#endif 

void myFunc(MyMeaningfulType myParam) 
{ 
    myFunc(10); 
} 

void setup() {} 
void loop() {} 

Đối với lợi ích của công cụ tìm kiếm, các lỗi được báo cáo là:

error: variable or field 'myFunc' declared void 
error: 'MyMeaningfulType' was not declared in this scope 

Trả lời

8

Vui lòng tham khảo http://arduino.cc/en/Hacking/BuildProcess báo giá cụ thể là:

This means that if you want to use a custom type as a function argument, you should declare it within a separate header file. 

Trang này làm một công việc tốt giải thích cách ngôn ngữ Arduino khác với C/C++ trong cách thức hoạt động/xử lý trước các tệp.

0

Họ đang cố tạo các nguyên mẫu cho mọi chức năng họ tìm thấy. Thật không may, nếu bạn định nghĩa một typedef trong tệp trước hàm và sử dụng nó trong định nghĩa hàm, nơi chúng đặt nguyên mẫu hàm không nhìn thấy nó, và điều này tạo ra một lỗi cú pháp.

Nếu bạn sử dụng cú pháp 'struct *' thay cho định nghĩa hàm, bạn được hưởng lợi từ cơ sở 'loại đục' của C, trong đó bạn có thể sử dụng định nghĩa struct mà không cần khai báo trước. Vì vậy, hãy xây dựng typedef, sử dụng nó, nhưng sử dụng định nghĩa struct trong bất kỳ hàm nào sử dụng typedef trong các đối số.

typedef struct mytype_ { 
    int f1; 
} mytype_t; 

void myfunc(struct mytype_ * xxx) { 
    xxx->f1 = 1; 
} 
Các vấn đề liên quan