Hallo,
ich bekomme bzgl. des unten abgebildeten Codes folgende Fehlermeldung und verstehe nicht warum und was sie bedeutet:
warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
const byte butPin[] = {
6, 7, 5, 4
};
#define NUMBUTTONS sizeof(butPin)
void setup() {
for (int i = 0; i < NUMBUTTONS; i++) // Buttons
{
}
}
void loop() {
// put your main code here, to run repeatedly:
}
Wie kann ich dieses Problem beheben?
Gruß Chris
Das ist "nur" eine Warnung.
Du vergleichst hier
signed und unsigned int
Mach das
for (unsigned int i = 0; i < NUMBUTTONS; i++)
und gut ists.
combie
January 19, 2024, 1:19pm
3
Einfach mal lesen!
Oder/Und auch mal in die Doku schauen, z.B. welchen Datentype sizeof() dir liefert.
Da braucht es kein define.
Merke: Jedes vermeidbare define ist ein böses define!
Das fällt Dir früher oder später auf die Füsse.
Benutze die selben Datentypen!
const byte butPin[] = { 6, 7, 5, 4 };
const byte NUMBUTTONS = sizeof(butPin) / sizeof(butPin[0]);
void setup()
{
for (byte i = 0; i < NUMBUTTONS; i++) // Buttons
{
}
}
void loop()
{
// put your main code here, to run repeatedly:
}
Das haben ganz viele schon gesagt und fallen auf die Nase, seitdem der ESP-Core eine restriktivere Behandlung durchführt...
Tipps hast eh schon bekommen.
Überleg dir, ob du die Array Anzahl überhaupt brauchst.
Ab C++11 gibts die range based for loop, und mit dem typen auto wird das noch einfacher
const uint8_t butPin[] = {
6, 7, 5, 4
};
void setup() {
for (auto &i : butPin) {
pinMode(i, INPUT_PULLUP);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
combie
January 19, 2024, 1:59pm
6
Das fällt dir bei großen Arrays auf die Füße!
Richtiger und universeller wäre:
constexpr size_t NUMBUTTONS {sizeof(butPin) / sizeof(butPin[0]});
Und: Das ist ohne zusätzlichen Speicherverbrach.
Sparsamkeit ist da kein Argument
Und noch besser:
noiasca:
range based for loop