Hallo,
ich wollte nachfolgenden Code verwenden um Adressbereiche vom Speicher
zu selectieren:
1 | unsigned long *pAdress, adress1, adress2;
|
2 | pAdress = &adress1;
|
3 |
|
4 | switch ( pAdress )
|
5 | {
|
6 | case ( &adress1 ):
|
7 | return 1;
|
8 |
|
9 | case ( &adress1 ):
|
10 | return 2;
|
11 | }
|
Erhalte beim compilieren aber die Fehlermeldungen:
1 | C:/Freescale/CW_MCU_v10.2/MCU/ARM_Tools/Command_Line_Tools/mwccarm|Compiler|Error
|
2 | (D:test.c|235|21|1|5797|1)
|
3 | = switch ( pAdress )
|
4 |
|
5 | Errors caused tool to abort.
|
6 | mingw32-make: *** [Sources/gpio.obj] Error 1
|
7 | >illegal operand 'unsigned long *'
|
8 | C:/Freescale/CW_MCU_v10.2/MCU/ARM_Tools/Command_Line_Tools/mwccarm|Compiler|Error
|
9 | (D:test.c|237|21|1|5828|1)
|
10 | = case ( &adress1 ):
|
11 | >illegal constant expression
|
12 | C:/Freescale/CW_MCU_v10.2/MCU/ARM_Tools/Command_Line_Tools/mwccarm|Compiler|Error
|
13 | (D:test.c|240|21|1|5877|1)
|
14 | = case ( &adress1 ):
|
15 | >illegal constant expression
|
Gestalte ich das ganze um in eine If/else Anweisung, funktioniert es
wieder.
1 | unsigned long *pAdress, adress1, adress2;
|
2 | pAdress = &adress1;
|
3 |
|
4 | if ( pAdress == &adress1 )
|
5 | {
|
6 | return 1;
|
7 | }
|
8 | else if ( pAdress == &adress2 )
|
9 | {
|
10 | return 2;
|
11 | }
|
Kann mir jemand erklähren warum der eine Weg geht, der andere aber
nicht? In meinen Augen ist das genau das gleiche?