Vill ha enum till att välja men nej...?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26621
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Vill ha enum till att välja men nej...?

Inlägg av Icecap »

Jag har nu fått sprutt på projektet på arbetet, det visade sig att om man använder ett FUNGERANDE kretskort, blir livet enklare...

Nåväl, samma (i stort) mjukvara används till en del lite olika projekt - som har olika namn.

Jag har vald att definiera vilket projekt i en gemensam definition då det tidigare var en "välling" av "om det är denna typ projekt..." och det gav ingen överskådlighet.

Men jag kunde tänka mig att ha:

Kod: Markera allt

enum
  {
  Projekt_type_A = 0,
  Projekt_type_B,
  Projekt_Type_C,
  osv.
  };
stående i en egen fil ('project_types.h').

Denna inkluderas i 'main.h' varefter man sedan - i 'main.h' - skriver:
#include "project_types.h"

#define THIS_PROJECT_TYPE Project_Type_B

I resten av programmet finns THIS_PROJECT_TYPE sedan med och kan användas till att välja hur funktioner ska göra och OM de ska finnas.

Men det fungerar inte!

Om jag däremot skriver:
#define Project_Type_A = (1)
#define Project_Type_B = (2)
#define Project_Type_C = (3)
osv.
istället för den enum fungerar allt som tänkt.

Projekten är STM32, använder STM32CubeIDE och GNU11 språkversion.

Vad gör jag fel?
hummel
Inlägg: 2525
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Vill ha enum till att välja men nej...?

Inlägg av hummel »

I C så tolkar reprocessordirektiv (#if, #ifdef, #elif osv) endast makron. Enum tolkas av kompilatorn i ett annat steg (efter preprocessorn).

Enkel lösning:
#define Project_Type_A 0
#define Project_Type_B 1
#define Project_Type_C 2

Det går att använda enum om du namnger din enum.
Användarvisningsbild
Icecap
Inlägg: 26621
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Vill ha enum till att välja men nej...?

Inlägg av Icecap »

Jaha... misstänkte det.

Tack, jag behövde få det verifierat.
Skriv svar