[英]Defining external variable externally
我一直在尋找解決方案,盡管有關於 SO 和其他地方的代碼片段和解釋,但它似乎不起作用。 我想要的是在外部定義一個非常大的數組,這樣它就不會弄亂代碼並在我的主文件中使用該定義。
這真的很簡單:
controller.h 定義了變量:
short KM[72][3][3][3][3][3][3];
KM[0][0][0][0][0][0][0] = 0;
KM[1][0][0][0][0][0][0] = 0;
KM[2][0][0][0][0][0][0] = 0;
// ...
// 50.000 more lines, not all =0
我希望這能在 main.ino 中工作:
extern short KM; // or KM[72][3][3][3][3][3][3], tried a lot
#include "controller.h"
void loop() {
...
}
但它沒有(“controller.h: [...] 錯誤:'KM' 沒有命名類型”)。 我想要的是在 controller.h 中隔離的值可以在 main.ino 中使用。
我正在使用 Arduino IDE 和 ESP32。
你不能用這樣的多個語句來初始化數組。 嘗試使用類似的東西:
short KM[72][3][3][3][3][3][3] = {
0, 0, ...
};
或使用函數:
void initKM(short KM[72][3][3][3][3][3][3]) {
KM[0][0][0][0][0][0][0] = 0;
}
此外,您應該在源文件( controller.c
?)中定義KM
,並在頭文件中包含extern
,這樣如果您共享頭文件,就會有一個 KM 的定義。
請注意,我並不是真的想確定語法,而是讓您了解如何實現這一點。
有關正確的初始化語法,請參閱此答案。
將聲明放在頭文件中:
extern short KM[72][3][3][3][3][3][3];
將定義放在源文件中:
short KM[72][3][3][3][3][3][3] = { … };
要將某些元素定義為非零,請使用指定的初始值設定項:
short KM[72][3][3][3][3][3][3] = {
[37][1][1][1][2][2][0] = 4,
…
};
如果有一系列連續的非零元素,您可以指定第一個並列出以下元素:
short KM[72][3][3][3][3][3][3] = {
[37][1][1][1][2][2][0] = 4, 5, 6, 9, 3,
…
};
(編譯器可能會警告您這一點,在這種情況下禁用是可以接受的警告。)
在使用該數組的任何源文件中包括標頭,包括定義它的那個。
編譯定義數組的源文件,並在鏈接程序時包含它。
只有聲明(包括定義)和預處理器語句可以在函數之外。 賦值語句如KM[0][0][0][0][0][0][0] = 0;
可能只出現在函數內部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.