---
title: "#define g.år inte att använda i switch/case & if-satser?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/182557-define-g-år-inte-att-använda-i-switch-case-if-satser"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Steady"
published: "2010-02-24T12:49:31.000Z"
updated: "2010-02-24T13:30:38.000Z"
replies: 2
views: 1121
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/182557-define-g-år-inte-att-använda-i-switch-case-if-satser"
---

# #define g.år inte att använda i switch/case & if-satser?

## #1 — Steady, 2010-02-24T12:49Z

Hej!
Sjukt länge sen man hängde på det här forumet, gillar att ni inte bytt färgtema än, känner sig fortfarande hemma :D

Har ett problem med en gnutta kod. Jag är helt ny på C++, har gjort en del i C och C# innan, men främst PHP och Java.
Anyhow, here's the deal:

Jag har skapat några fördefinerade rader som ser ut såhär:

```
#define APP_STATE_IDLE 0;
#define APP_STATE_SCANNED 1;
#define APP_STATE_ANIMATE 2;
#define APP_STATE_COMPLETE 3;
```

Problemet är nu när jag försöker använda dessa så går det inte att använda dem i t.ex. case och if-satser, typ såhär:

```
switch (APP_STATE) {
	case APP_STATE_IDLE: // <-- ger felmeddelande "Expected ':' before ';' token"
		cout <<	"idle" << endl;
		APP_STATE = APP_STATE_SCANNED; // <-- ger inget felmeddelande
		break;
	default:
		break;
}
```

Hur kommer sig detta? Det blir samma fel när jag skriver

```
if (APP_STATE > APP_STATE_SCANNED) {

}
```

Hoppas någon kan "shed some light" på det här, för jag är clueless.

Tack!

Permalänk: https://www.webforum.nu/p/182557

## #2 — nitro2k01, 2010-02-24T13:19Z

\#define är inte en del av språket C/C++, utan hanteras av den så kallade preprocessorn innan koden kompileras. Vad #define gör är enkel sträng-ersättning. T ex ber du preprocessorn ersätta alla förekomster av **APP_STATE_IDLE** med **0;** 
Alltså ser kompilatorn **case 0;:** som är fel av uppenbara skäl.

Av samma anledning bör du använda parenteser både runt in-argumenten och hela uttrycket om du använder någon operator i definitionen:

```
Fel
#define multiply( n1,n2 ) n1*n2

x=2/sum(5+8, 3+6);
-> x=2/5+8*3+6;

Rätt
#define multiply( n1,n2 ) ( (n1)*(n2) )

x=2/sum(5+8, 3+6);
-> x=2/( (5+8)*(3+6) );
```

Permalänk: https://www.webforum.nu/p/2226712

## #3 — Steady, 2010-02-24T13:30Z

. (y) 

Tusen tack, det låter mer logiskt, vet inte riktigt hur jag tänkte när jag skrev semikolon efter varje rad.

Permalänk: https://www.webforum.nu/p/2226713

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/182557-define-g-år-inte-att-använda-i-switch-case-if-satser
