簡體   English   中英

在外部定義外部變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM