Forum: Compiler & IDEs error: expected identifier or '(' before 'volatile'


von ich (Gast)


Lesenswert?

Hallo,
Kann jemand netterweise sagen wo der Fehler ist.
Es scheint mir alles korrekt zu sein.

Dank


main.c
-------------------------

#include "main.h"

int main (void){

  while (1){
    ;
  }

  return 0;
}

-------------------------
main.h
-------------------------

#include <stdio.h>
#include <avr/wdt.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <string.h>
#include <avr/eeprom.h>



DDRB = (1<<DDB0) | (1<<DDB1);

PORTB = (0<<PB0) | (0<<PB1 ) | (0<<PB2) | (0<<PB3) | (0<<PB4);

ADMUX = (1<<REFS0);


ADCSRA = (1 << ADEN)  | (1 << ADSC ) | (1 << ADPS2) | (1<<ADPS1);


------------------
FehlerMeldung:


Compiling C: main.c
avr-gcc -c -mmcu=attiny13 -I. -gdwarf-2 -DF_CPU=8000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -MMD -MP -MF 
.dep/main.o.d main.c -o main.o
In file included from main.c:2:
main.h:11: error: expected identifier or '(' before 'volatile'
main.h:11: error: expected ')' before '(' token
main.h:13: error: expected identifier or '(' before 'volatile'
main.h:13: error: expected ')' before '(' token
main.h:15: error: expected identifier or '(' before 'volatile'
main.h:15: error: expected ')' before '(' token
main.h:18: error: expected identifier or '(' before 'volatile'
main.h:18: error: expected ')' before '(' token
make.exe: *** [main.o] Error 1

von (prx) A. K. (prx)


Lesenswert?

Ausserhalb einer Funktion ist sowas
 DDRB = (1<<DDB0) | (1<<DDB1);
nicht wirklich sinnvoll.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ich schrieb:
> Kann jemand netterweise sagen wo der Fehler ist.

In der (Nicht-)Beherrschung der Programmiersprache C deinerseits.

In C darf ausführbarer Code grundsätzlich nur innerhalb von Funktionen
auftreten.  Damit verbietet es sich (von inline-Funktionen mal
abgesehen) normalerweise von selbst, derartige Konstrukte in
Header-Dateien unterzubringen.

von uninteressant... (Gast)


Lesenswert?

Probier mal die Anweisungen in die main()-Funktion zu schreiben und 
nicht in die Header-Datei.

von ich (Gast)


Lesenswert?

Ich danke euch viel mals für die Antworten besondere Dank
für den Groß Meister Jörg Wunsch



Ich habe es abgeändert und es gibt keine Fehler mehr.


--------------------------------------
main.c
--------------------------------------
#include "main.h"

int main (void){

  init_ATiny13();

  while (1){
    ;
  }

  return 0;
}

--------------------------------------
main.h
--------------------------------------

#include <stdio.h>
#include <avr/wdt.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <string.h>
#include <avr/eeprom.h>


void init_ATiny13(void)
{

  DDRB = (1<<DDB0) | (1<<DDB1);
  PORTB = (0<<PB0) | (0<<PB1 ) | (0<<PB2) | (0<<PB3) | (0<<PB4);
  ADMUX = (1<<REFS0);
  ADCSRA = (1 << ADEN)  | (1 << ADSC ) | (1 << ADPS2) | (1<<ADPS1);

}

von Klaus (Gast)


Lesenswert?

Um es richtig zu machen, musst du nur noch die Funktion aus dem Header 
in die Main verschieben. Denn in einen Header gehört kein Code. Sondern 
nur Deklarationen.

von arno nyhm (Gast)


Lesenswert?

das einsame semikolon in deiner main-schleife macht sich auch nicht so 
gut, das gehört dort nicht hin. wenn ein block leer sein soll, ist er 
allein ausreichend, da muss nicht zwingend etwas hinein.
1
int main(void) {
2
  init_ATiny13();
3
  
4
  while (1) {
5
  }
6
7
  return 0;
8
}

von arno nyhm (Gast)


Lesenswert?

btw. ein gutes c++-tutorial (die pdf-version ist empfehlenswert):
http://www.cplusplus.com/doc/tutorial/

ist zwar c++, daher für den blutigen einstieg in c mit vorsicht zu 
genießen, aber den syntax erklärt es gut und die ähnlichkeit zu plain-c 
macht es auch für den einstieg in jenes nützlich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.