typedef und struct Problem mit ICC8 AVR Compiler

#4117386
Lesenswert?

Hallo zusammen,

ich bin mit dem ICC8 AVR Compiler von ImageCraft und mit der 
Code::Blocks Entwicklungsumgebung auf ein Problem getreten, auf das ich 
keine Lösung finde.

Ein Beispiel:
1
#include <macros.h>
2
#include <iom644pv.h>
3

4
typedef int INT;
5

6
typedef struct{
7
    int a;
8
    int b;
9
    } MYSTRUCT;
10

11
int main(void)
12
{
13
    //PORTB = 0;    // Wird dieser Befehl vor der Deklaration von 'a' und 'myStruct' ausgeführt, treten besagt Fehler auf
14

15
    INT a;
16
    MYSTRUCT myStruct;
17

18
    a = 0;
19
    myStruct.a = 0;
20

21
    PORTB = a;
22
    PORTB = myStruct.a;
23

24
    while(1)
25
    {
26
    }
27
    return 0;
28
}

Wie zu sehen ist verwende ich in dem Beispiel typedef und struct. Der 
gezeigte Code lässt sich auch fehlerfrei kompilieren.

Aber wenn vor der Deklaration von 'a' und 'myStruct' etwas "Anderes" 
gemacht wird, wie z.B in eine Funktion gesprungen oder wie hier ein 
Register angesprochen wird, gibt es beim übersetzen Fehler wie:
- illegal use of type name `INT'
- syntax error; found `a' expecting `;'
- undeclared identifier `a'

Das Programm lässt sich also nur Überetzen, wenn in der main-Fuktion als 
erstes alle Variablen deklariert werden die etwas mit typedef und struct 
zu tun haben.
Wie kann das sein?

Das selbe (bis auf andere includes) Programm läuft einwandfrei unter dem 
AtmelStudio 6 und dem GCC Combiler.

Hat jemand eine Idee?

LG
Hauke
#4117665
Lesenswert?

Hauke F. schrieb:
> Marc schrieb:
>> Weil du in C das schlicht nicht tun darfst.
>
> Was darf ich denn nicht tuhen?

Du darfst nicht erwarten, dass ein kommerzieller Compiler schon in 
diesem Jahrtausend angekommen ist.

> Ich habe doch nur schlicht Variablen deklariert. Und das darf man meines
> Wissens doch immer...

Das was mal vor 26 Jahren in C verboten. Bei ICC ist es das offenbar 
heute noch.
#4119215
Lesenswert?

Markus F. schrieb:
> Jörg Wunsch schrieb:
>> Rolf Magnus schrieb:
>>> Das was mal vor 26 Jahren in C verboten.
>>
>> Du hast ein Carry-Bit verloren. ;-)
>>
>> 16 Jahre isses her, dass der vorletzte C-Standard verabschiedet worden
>> ist.
>
> Trotzdem war's vor 26 Jahren auch verboten ;)

Richtig. Vor 16 Jahren hat es lediglich aufgehört, verboten zu sein…

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren