[C] parse error before

Pagina: 1
Acties:

  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Sorry voor de nogal onduidelijke topictitel maar ik wist echt niet wat hiervan te maken.
Ik heb al een dag of wat het volgende probleem (ik heb een even een zo kort mogelijk programma geschreven die het probleem behandeld).

In owcomdefs staan definities om een INT vast te stellen op arm etc. Deze worden door de gehele voorbeeld code en libraries gebruikt dus ik zit er nogal aan vast.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*************** SYSTEM INCLUDES ***************/
#include <owa2x/owcomdefs.h>
#include <stdio.h>
    
/*************** USER INCLUDES ***************/

/*************** MAIN ***************/
int main (void)
{
    INT test1 = 0;
    INT test2 = 0;

    test1 = 2;
    test2 = 2;
    
    printf("test1 = %d, test2 = %d \n", test1, test2);
    return 0;
}

/*
joost@joost-laptop:~/test/implicitdeclaration$ arm-linux-gcc -Wall main.c -o main;
joost@joost-laptop:~/test/implicitdeclaration$

dit compileert dus prima

arm output ->
# ./main
test1 = 2, test2 = 2
#

*/


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*************** SYSTEM INCLUDES ***************/
#include <owa2x/owcomdefs.h>
#include <stdio.h>
    
/*************** USER INCLUDES ***************/

/*************** MAIN ***************/
int main (void)
{
    INT test1 = 0;
    test1 = 2;
    INT test2 = 0;

    //test1 = 2;
    test2 = 2;
    
    printf("test1 = %d, test2 = %d \n", test1, test2);
    return 0;
}

/*
joost@joost-laptop:~/test/implicitdeclaration$ arm-linux-gcc -Wall main.c -o main;
main.c: In function `main':
main.c:12: parse error before `test2'
main.c:15: `test2' undeclared (first use in this function)
main.c:15: (Each undeclared identifier is reported only once
main.c:15: for each function it appears in.)
joost@joost-laptop:~/test/implicitdeclaration$   
*/


Die comments onderaan staan dus niet echt in de code maar ehb ik er even voor de duidelijkheid in de post gezet. Ik ben bang dat ik me of doodstaar op iets doodsimpels of dat er echt iets vaags gebeurd. Iemand tips?


Dit is dus die library ik heb hem er toch maar even bijgezet voor de duidelijkheid. Heb alleen een kilometer aan comments bovenaan geschrapt. Wil ik eventueel ook nog wel posten :P
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#ifndef __OWCOMDEFS_H

   #define __OWCOMDEFS_H



/*****************************************/
/***    ARM compiler for ARM7TM (32-bit)     **/
/*****************************************/
   #ifdef __OWASYS_ARM

      typedef long int                  INT32;  
      typedef unsigned long int     UINT32; 
      typedef long int                  BOOL32; 
      typedef short int                 INT16;  
      typedef unsigned short int        UINT16; 
      typedef short int                 BOOL16; 
      typedef unsigned char         UCHAR;

      #define REGISTER      register        

      #define PACKSTRUCT    __packed

      #define memclr(what, size)    memset(what, 0, size)

      #define CAST_TO_UINT32(x)    (INT32)(fmod( x, (double)MAX_INT32))

   #else
      typedef long int              INT32;  
      typedef unsigned long int     UINT32;
      typedef long int              BOOL32;
      typedef short int             INT16;
      typedef unsigned short int    UINT16;
      typedef short int             BOOL16;
   #endif
//*******************************************
//**        Compiler-independent typedefs       **
//*******************************************

   typedef long                     LONG;
   typedef unsigned long           ULONG;
   typedef short int               SHORT;
   typedef unsigned short int      USHORT;
   typedef int                     INT;
   typedef unsigned int            UINT;

   typedef char                    CHAR;
   typedef unsigned char           BYTE;
   typedef unsigned char           UBYTE;
   typedef signed char             TINY;
   typedef unsigned char           UTINY;
   #define VOID                    void
   typedef unsigned char            UCHAR;

   typedef float                   FLOAT;
   typedef double                  DOUBLE;

   typedef int                     BOOL;
   typedef int                     WERR;

   typedef unsigned short           WORD;
   typedef unsigned long            DWORD;

/*******************************************/
/**     Compiler-independent defines        **/
/*******************************************/

   #ifndef NULL
      #define NULL                  0
   #endif

   #ifndef EOF
      #define EOF                       (-1)
   #endif

   #ifndef FALSE
      #define FALSE                 0
   #endif

/*******************************************************************************/
/*  NOTE:   No matter how we define 'TRUE', there's some possibility that 'TRUE'  */
/*      one one compiler won't be 'TRUE' on another.  This is only a problem  */
/*      for BOOL16 (e.g., files and messages between compilers).  Be careful. */
/*******************************************************************************/

   #ifndef TRUE
      #define TRUE                  (!FALSE)
   #endif


/****************************************/
/**     Compiler-independent macros      **/
/****************************************/

   #define ABS(a)           (((a) < 0) ? (-(a)) : (a))

   #define SIGN(a,b)        (((b) <   0) ? (-ABS(a)) : (ABS(a)))

   #ifndef MIN
      #define MIN(a,b)      (((a) < (b)) ? (a) : (b))
   #endif

   #ifndef MAX
      #define MAX(a,b)      (((a) > (b)) ? (a) : (b))
   #endif

   #define MINMAX(a,b,c) MAX(MIN((a),(c)),(b))  /* (((a) < (b)) ? (b) : (((a) > (c)) ? (c) : (a))) */

#endif

[ Voor 46% gewijzigd door Gehakt op 22-11-2006 15:59 ]


  • schoene
  • Registratie: Maart 2003
  • Laatst online: 20:27
Ik dacht dat in C alle declaraties bovenaan in een functie moesten staan?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

In C kun je niet halverwege een functie je variabelen declareren. Deze moeten allemaal bovenaan staan. Vandaar dat je tweede versie niet werkt. Hier wordt immers al met de code begonnen (waarde aan test1 toekennen) waarna je nog een variabele (test2) probeert te declareren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Janoz schreef op woensdag 22 november 2006 @ 16:00:
In C kun je niet halverwege een functie je variabelen declareren. Deze moeten allemaal bovenaan staan. Vandaar dat je tweede versie niet werkt. Hier wordt immers al met de code begonnen (waarde aan test1 toekennen) waarna je nog een variabele (test2) probeert te declareren.
Het is dus echt iets simpels. :| Volgens mij moet ik het boek toch nog eens goed doorlezen en eens een paar dagen iets anders doen. :P

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou weet ik niet welke compiler je gebruikt, maar het mag dus wél in C, sinds 1999 :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Ja het was nog niet zo dom van me. Want met de gewone gcc compiler op mijn laptop kreeg ik geen fouten. Dat was waarom ik zo in de war raakte. Blijkbaar heb ik dus een oudere arm-linux-gcc compiler meegelverd gekregen. Beetje raar is dat wel als het al sinds 1999 mag.

ohw ik heb even gekeken:
arm-linux-gcc 2.95.2
gcc 4.1.2

Dat is nogal een verschil.

[ Voor 46% gewijzigd door Gehakt op 22-11-2006 16:10 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Mwah, het is niet dat het sinds 1999 mag, het is eerder dat het daadwerkelijk voor het eerst in de c99 standaard opgenomen is. De vorige mocht het nog niet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Gehakt schreef op woensdag 22 november 2006 @ 16:08:
Ja het was nog niet zo dom van me. Want met de gewone gcc compiler op mijn laptop kreeg ik geen fouten. Dat was waarom ik zo in de war raakte. Blijkbaar heb ik dus een oudere arm-linux-gcc compiler meegelverd gekregen. Beetje raar is dat wel als het al sinds 1999 mag.

ohw ik heb even gekeken:
arm-linux-gcc 2.95.2
gcc 4.1.2

Dat is nogal een verschil.
Mss dat ie de -std=c99 flag ondersteunt?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
farlane schreef op woensdag 22 november 2006 @ 17:45:
[...]


Mss dat ie de -std=c99 flag ondersteunt?
Hij heeft wel de -std flag maar c99 werkt iig niet. Geeft nog steeds dezelfde compile errors.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Kijk ff welke die wel ondersteunt dan. Er is na 1990 vast wel een versie geweest waarbij je de variabelen niet bovenaan hieft te declareren

Waar je ook aan zou kunnen denken is een nieuwere (cross)compiler te pakkenn

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Nou - ISO C heeft wel een 1995 variant, maar ook die eiste definities bovenaan.

Eerlijk gezegd is gcc 2.95.2 antiek, vorige eeuw. ARM is een uitstekend ondersteund platform, dus een gcc4 zou ook gewoon moeten werken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
jah maar hoe moet ik dan compileren? met die -b(machine) flag ofzo? of welke packages moet ik apt-getten zodat ik een arm compiler installeer?

Want ik heb het nagekeken op gcc en dat ding komt idd uit 1999. Precies het jaar waarna er volgens .oisyn dus wel halverwege je code variablen mochten worden gedeclareerd. Overigens heb ik de de fabrikant ook (Owasys) in dit geval ook geemaild wat de reden is dat er een compiler uit 1999 word meegeleverd. Ik heb hier nog geen bericht over terug gehad en aangezien ik morgen niet op stage ben zal ik pas op z'n vroegst maandag daar iets over kunnen melden.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Als die compiler uit '99 komt denk ik niet dat ze de nieuwe standaard daarin al geïmplementeerd hebben. Daar gaan meestal nog wel wat meerdere jaartjes overheen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Gehakt schreef op donderdag 23 november 2006 @ 23:59:
jah maar hoe moet ik dan compileren? met die -b(machine) flag ofzo? of welke packages moet ik apt-getten zodat ik een arm compiler installeer?
-target flag volgens mij, maar je moet dan alle libs natuurlijk ook in arm formaat passend bij de compiler hebben.

Heeft de fabrikant van jouw platvorm geen distributie geen complete ontwikkelomgeving? ( Ik weet bijvoorbeeld dat Arcom een distributie heeft voor haar op ARM gebaseerde VIPER board. Deze heeft een complete toolchain + libraries gebaseerd op Fedora5 )

Kijk bijvoorbeeld eens hier http://www.gnuarm.com/

[ Voor 4% gewijzigd door farlane op 24-11-2006 09:35 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
De reactie op mijn mail:

Variables should be declared at the begining of the code in most versions of C languaje. And it's considered as a good practice in order to get a structured program.
Otherwise varaibles could be "spreaded" all over the code. making it very difficult to understand.

I don't now if in more modern compilers/versions they have "relaxed" this restriction, although they still can be set to compile with "strict" rules.

About the use of a newer compiler, It's better to stick to the provided cross-compiler when developing the code for the Owa21 platform.
All libraries are compiled using the ARM cross-compiler included in the developers kit, so I guess it's quite difficult for you to use a newer one.
This version is old but is a very stable version for embedded Linux systems.

Most Owasys customer's do have applications compiled with this version. Upgrading to a newer one would mean for Owasys to be 100% sure all the applications that are in the field will keep running without any problem. We will do but not in the near future.

Kind regards

Overigens werd er alleen een compiler en de api's geleverd en geen ontwikkelomgeving. Er werd aangeraden kdevelop te gebruiken wat ik nu ook doe. Maargoed het lijkt me dat bijna elke tekstverwerker met syntax highlighting moet werken.

Aangezien dit een programmeer forum is neem ik aan dat wat engelse tekst geen probleem mag vormen. :+

[ Voor 4% gewijzigd door Gehakt op 27-11-2006 09:16 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Ik ben het absoluut niet eens met de redenering van de meneer die je hebt aangeschreven , maargoed ik denk eerlijk gezegd dat je misschien de vraag niet helemaal handig gesteld hebt :) ( Het maakt in principe helemaal geen hol uit _waarom_ je graag met een nieuwere compiler zou werken. Het is nu net alsof deze meneer je probeert te overtuigen van het feit dat hij geen nieuwere compiler heeft omdat het niet nodig zou zijn. Alle redenen die jij zou kunnen aanvoeren zal hij een antwoord op hebben geloof me )

IIg het komt er op neer dat als je een nieuwere wilt gebruiken dat je zelf alle libaries zou moeten hercompileren, en als je die stap zou nemen krijg je zeker geen ondersteuning meer :)

Wat je nog zou kunnen doen is de nieuwste compiler pakken die wel met dezelfde versie van de libraries overweg kan zodat je die niet opnieuw hoeft te bouwen. Ik ben alleen bang dat deze in de 2.X reeks zit en dus ook geen nieuwere versie van de C standaard ondersteunt.

Overigens, het leuke van Unix ( of Linux ftm ) is dat je zelf je ontwikkelomgeving mag keizen :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
farlane schreef op maandag 27 november 2006 @ 09:33:
IIg het komt er op neer dat als je een nieuwere wilt gebruiken dat je zelf alle libaries zou moeten hercompileren, en als je die stap zou nemen krijg je zeker geen ondersteuning meer :)
Die stap zou ook betekenen dat ik die het OS zou moeten updaten (staat wel beschreven hoe als ik me goed herinner). Dit word vanuit flash in het ram geladen. En als je door het hercompileren al geen support verliest dan vast daar wel weer door.

Maar als ik het zo lees is het gewoon het makkelijkste om de variablen bovenin te proppen dus dat is ook maar wat ik ga doen.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Gehakt schreef op maandag 27 november 2006 @ 09:44:
Die stap zou ook betekenen dat ik die het OS zou moeten updaten (staat wel beschreven hoe als ik me goed herinner). Dit word vanuit flash in het ram geladen. En als je door het hercompileren al geen support verliest dan vast daar wel weer door.
Jup, echter dat kan niet zo moeilijk zijn daar bij een embedded systeem ook de user applicatie in flash staat. Het updaten van je OS zou dus net zo moeilijk/makkelijk moeten zijn als het updaten van je eigen applicatie.
Maar als ik het zo lees is het gewoon het makkelijkste om de variablen bovenin te proppen dus dat is ook maar wat ik ga doen.
Wel de snelste oplossing, niet de leukste :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gehakt schreef op maandag 27 november 2006 @ 09:15:
And it's considered as a good practice in order to get a structured program.
Otherwise varaibles could be "spreaded" all over the code. making it very difficult to understand.
Lol, "considered good practice"? Door wie dan, en waarom is C dan ook overstag gegaan? :D

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

*nm*

[ Voor 97% gewijzigd door Verwijderd op 27-11-2006 11:47 ]

Pagina: 1