[C] compile fout, iets met array's

Pagina: 1
Acties:

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Als ik main.c wil compilen van wwwinamp (www.nullsoft.com/free/), geeft ie een error in regel 727 t/m 731...
Nu is dat stukje dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
  struct 
      {
        char *tok;
        char *s;
      } s[]=
      {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
      };

Dat vanaf {"m=" etc is dus fout.
Aangezien ik weinig verstand heb van C syntax.. Wat is hier mis mee?

bvd

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
  struct 
      {
        char *tok;
        char *s;
      } s[]=
      {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
      };

Wat voor foutmeldingen??

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Deze: (ik quote uit .err file)
Error "h:\program files\wwwinamp\source\main.c": 727 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 728 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 729 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 730 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 731 initializer must be constant

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
  struct 
  {
    char *tok;
    char *s;
  } 
  s[]={{"m=",mode},
     {"o=",opt},
     {"a=",add},
     {"s=",search},
     {"ss=",srchstart}};

Zo werkt tie bij mij.

  • Dim
  • Registratie: Januari 2000
  • Laatst online: 09-05 19:58

Dim

Error "h:\program files\wwwinamp\source\main.c": 727 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 728 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 729 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 730 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 731 initializer must be constant
Je hebt hier te maken met een compiler die vrij strikt is. Hij interpreteert namelijk de "char *tok" declaratie in de struct als een non-const object, terwijl een literal string zoals "m=" nou juist een const object is. En dus klaagt ie dat de initializer const moet zijn.

Er zijn 2 oplossingen voor het probleem. De eerste is om de struct definitie aan te passen tot:

struct {
const char *tok;
char *s;
} ...

maar het zou kunnen dat de rest van het programma daar niet op rekent, dus kijk uit.

De andere oplossing is een optie van je compiler zoeken waardoor ie literal strings niet meer als "const" ziet. Dit is afhankelijk van de C compiler die je gebruikt, welke is dat?

My other computer is your windows box.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Euhm, ik gebruik LCC-win32
ik ga even die andere suggestie proberen, werkt het niet dan post ik hier weer.. Dankje iig alvast.

Verwijderd

try this
code:
1
2
const char *tok
const char *s

hmm iemand anders was me al voor :)

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Const ervoor zetten werkt helaas niet ;(.

Welke compiler moet ik dan hebben? (pref win2k/winXP compatible :))

Verwijderd

ik gebruik visual c++

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:00
Op donderdag 15 november 2001 21:07 schreef Avater het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
  struct 
      {
        char *tok;
        char *s;
      } s[]=
      {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
      };

Wat voor foutmeldingen??
Het gaat mis met uw haakjes. Een struct moet afgesloten worden met }; . En je sluit hem af met }

Dus :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct 
{
  char *tok;
  char *s;
  s[]=
    {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
     }
};

of
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct 
{
  char *tok;
  char *s;
};
  s[]=
    {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
     }

Afhankelijk of die array tot uw struct behoord of niet

https://fgheysels.github.io/


  • Remenic
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:06
Op donderdag 15 november 2001 22:24 schreef whoami het volgende:

[..]

Het gaat mis met uw haakjes. Een struct moet afgesloten worden met }; . En je sluit hem af met }

Dus :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct 
{
  char *tok;
  char *s;
  s[]=
    {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
     }
};

of
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct 
{
  char *tok;
  char *s;
};
  s[]=
    {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
     }

Afhankelijk of die array tot uw struct behoord of niet
Allebij zijn vreselijk fout. wat is s[] ? Een array van wat? ints? chars? floats?

je stopt in een enkele array waardes die alleen passen in een 2d array.

Bij het eerste voorbeeld, hoe heet de struct?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Geef eens even de context van de code. Zo schiet het niet op.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Op vrijdag 16 november 2001 13:08 schreef Remenic het volgende:

[..]

Allebij zijn vreselijk fout.
Valt wel mee hoor:
Wat ie namelijk wil is een arraytje van die structs in de var s stoppen. Net zoals je een gewone array kan initialiseren met int a[] = {0,1,2}; kan je een array van structs ook zo initialiseren. Dat doet ie dus met die s[] = {{"m=",mode},etc}. "m=" wordt in de eerste var van de struct gezet, mode in de tweede var... De syntax is dus wel degelijk correct!
Bij het eerste voorbeeld, hoe heet de struct?
Het is een anonieme struct. Hij wil dus gewoon een arraytje van die structs in var s hebben. Dan hoef je je struct niet per se een naam te geven (mag natuurlijk wel).

Verwijderd

Op zich is de syntax correct. Ik denk dat je pointers mode, opt, add, search en srchstart niet constant zijn. Als je het warning level van je compiler lager zet zou het gewoon moeten compilen.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

correct... ok....
netjes ... mwah...

foutgevoelig .... definitely!

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op donderdag 15 november 2001 22:24 schreef whoami het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct 
{
  char *tok;
  char *s;
};
  s[]=
    {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
     }
Bij deze krijg ik iig zoveel errors dat ik de kluts kwijt raak.

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op vrijdag 16 november 2001 13:29 schreef drm het volgende:
Geef eens even de context van de code. Zo schiet het niet op.
Kijk eens in de eerste post.. Kan je het zelf downloaden, _alle_ files (wwwinamp is het dus).

  • Greyfox
  • Registratie: Januari 2001
  • Laatst online: 16-09 21:53

Greyfox

MSX rulez

Op donderdag 15 november 2001 20:51 schreef GeonetiX het volgende:
Aangezien ik weinig verstand heb van C syntax.. Wat is hier mis mee?
Even zeiken hoor, maar waarom wil je dit uberhaupt compileren als je geen verstand van de syntax van C hebt?
Dan klopt er toch iets niet?

MSX 2 rulez more


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op vrijdag 16 november 2001 15:10 schreef Greyfox het volgende:

[..]

Even zeiken hoor, maar waarom wil je dit uberhaupt compileren als je geen verstand van de syntax van C hebt?
Dan klopt er toch iets niet?
D'oh, omdat ik een paar kleine wijzigingen heb gemaakt in de output die ie naar de browser schopt (ik snap veel wel, php lijkt er verdacht veel op). Dus moet ik het nu compilen wil ik het werkend hebben...

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Volgens mij wordt dit ongeveer bedoeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char * mode,*opt,*add,*search,*srchstart;

struct _s
{
  char *tok;
  char *s;
};

struct _s s[]=
{
   {"m=",mode},
   {"o=",opt},
   {"a=",add},
   {"s=",search},
   {"ss=",srchstart}
};

Wat natuurlijk alleen werkt als mode,opt,add,search en srchstart constant zijn, zoals hiervoor al aangegeven werd.

[edit]
code:
1
2
3
char mode[256]="";
char add[256]="",opt[256]="";
char search[256]="",srchstart[256]="";

Wat ze ook zijn dus.....

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.


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:00
Op vrijdag 16 november 2001 17:43 schreef farlane het volgende:
Volgens mij wordt dit ongeveer bedoeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char * mode,*opt,*add,*search,*srchstart;

struct _s
{
  char *tok;
  char *s;
};

struct _s s[]=
{
   {"m=",mode},
   {"o=",opt},
   {"a=",add},
   {"s=",search},
   {"ss=",srchstart}
};

Wat natuurlijk alleen werkt als mode,opt,add,search en srchstart constant zijn, zoals hiervoor al aangegeven werd.
Dat zou wel eens goed kunnen .

https://fgheysels.github.io/


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Hmmmm...wat een zootje zeg....

Dat projectbestand voor VS dat erbij zit klopt van geen kant, moest Ws2_32.lib en LIBCT.LIB nog meelinken, alhoewel het projectbestand beweert dat het single-threaded moet zijn Naja....

Verder moet het ini bestand wwwinsock2.ini heten...[edit] Oh nee toch niet...:o

Ook zei ik dat die buffers constant waren, wat natuurlijk niet zo is, de pointer naar de buffer is constant.

Misschien dat je compiler zo niet meer zeurt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static char mode[256]="";
static char add[256]="",opt[256]="";
static char search[256]="",srchstart[256]="";
char *p=strstr(url,"?");
char *thisurl="/";

struct _s
{
    char *tok;
    char *s;
};

struct _s s[]=
{
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
};

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.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op vrijdag 16 november 2001 18:54 schreef farlane het volgende:
Hmmmm...wat een zootje zeg....

Dat projectbestand voor VS dat erbij zit klopt van geen kant, moest Ws2_32.lib en LIBCT.LIB nog meelinken, alhoewel het projectbestand beweert dat het single-threaded moet zijn Naja....

Verder moet het ini bestand wwwinsock2.ini heten...[edit] Oh nee toch niet...:o

Ook zei ik dat die buffers constant waren, wat natuurlijk niet zo is, de pointer naar de buffer is constant.

Misschien dat je compiler zo niet meer zeurt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static char mode[256]="";
static char add[256]="",opt[256]="";
static char search[256]="",srchstart[256]="";
char *p=strstr(url,"?");
char *thisurl="/";

struct _s
{
    char *tok;
    char *s;
};

struct _s s[]=
{
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
};
Neej. Zo krijg ik er 2 errors bij ;(.
Zeikerige compiler zeker?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
code:
1
2
 {"ss=",srchstart},
            ^ komma moet weg

dat is iig fout. zou wel handig zijn als je ook ff zegt welke foutmelding je nog meer krijgt.

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op vrijdag 16 november 2001 21:06 schreef marcusk het volgende:
code:
1
2
 {"ss=",srchstart},
            ^ komma moet weg

dat is iig fout. zou wel handig zijn als je ook ff zegt welke foutmelding je nog meer krijgt.
Dat zou idd slim zijn ja :D
Error "h:\program files\wwwinamp\source\main.c": 726 missing semicolon after structure declaration
Error "h:\program files\wwwinamp\source\main.c": 726 invalid use of `struct'
Error "h:\program files\wwwinamp\source\main.c": 727 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 728 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 729 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 730 initializer must be constant
Error "h:\program files\wwwinamp\source\main.c": 731 initializer must be constant
Die komma streep ik nu weg.
[edit] Komma weghalen geeft geen resultaat..

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Hmm.. Niemand meer?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Post de source eens zoals je hem nu hebt, ik denk namelijk dat je toch nog een ; vergeten bent. (Overigens had ik 'em al wel werkend met Warning level 4 in VS)

Mag ik ook nog even opmerken dat je idd een vreselijke zeikcompiler hebt uitgekozen ;)

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.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op zaterdag 17 november 2001 14:03 schreef farlane het volgende:
Post de source eens zoals je hem nu hebt, ik denk namelijk dat je toch nog een ; vergeten bent. (Overigens had ik 'em al wel werkend met Warning level 4 in VS)

Mag ik ook nog even opmerken dat je idd een vreselijke zeikcompiler hebt uitgekozen ;)
Ik heb de source weer in originele staat, dus daar is na al het proberen gewoon niets aan veranderd :).

Ik denk dat ik maar even op zoek ga naar VS... :)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Ik vind eigenlijk dat het met de jouwe ook moet kunnen, want het is redelijk correct C, behalve die constante string die niet constant genoeg is volgens de compiler.

Hmmm..ik ga dat ding ook ff ophalen, of is het geen vrij verkrijgbare compiler?

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.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Nou, ik heb het geheel even neergehaald, en enige ideeen getest. Met deze code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    static char mode[256]="";
    static char add[256]="";
    static char opt[256]="";
    static char search[256]="";
    static char srchstart[256]="";
    char *p=strstr(url,"?");
    char *thisurl="/";
    struct
    {
      char *tok;
    char *s;
    }s[]=
    {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart},
    };

Compileert het goed. Evenals met deze:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    static char mode[256]="";
    static char add[256]="";
    static char opt[256]="";
    static char search[256]="";
    static char srchstart[256]="";
    char *p=strstr(url,"?");
    char *thisurl="/";

    struct _s
    {
      char *tok;
    char *s;
    };

    struct _s s[]=
    {
    {"m=",mode},
    {"o=",opt},
    {"a=",add},
    {"s=",search},
    {"ss=",srchstart}
    };

Tijdens het linken geeft lcc al aan dat het wsock.lib mist, en voegt deze zelf toe aan het project. Daarnaa gaat een compile feilloos.

Kortom, toch niet zo'n zeikcompiler als ik dacht. :)

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.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op zondag 18 november 2001 01:11 schreef farlane het volgende:
Nou, ik heb het geheel even neergehaald, en enige ideeen getest. Met deze code
[..]
Compileert het goed. Evenals met deze:
[..]
Tijdens het linken geeft lcc al aan dat het wsock.lib mist, en voegt deze zelf toe aan het project. Daarnaa gaat een compile feilloos.

Kortom, toch niet zo'n zeikcompiler als ik dacht. :)
Kan je mij dan misschien eventjes uitleggen wat er bij mij fout gaat? Want ik krijg dus geen melding dat wsock.lib mist, en hij compiled zeker niet..

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Hij zegt niet dat 'ie wsock.lb mist omdat 'ie niet copileert; linken gaat het ding pas doen nadat er geldige objectbestanden zijn. (Dat was je eerste opmerking/vraag :) )

Je tweede opmerking: Nee, ik kan je niet vertellen wat er fout gaat bij jou, want daarvoor mis ik de informatie.

Als je die code die ik gepost heb, plakt op de plaats waar het nu fout gaat _moet_ het ding copileren.

Note, de enige verschillen met de originele code zijn dus die declaraties van de buffers, waar nu 4 maal static voorstaat.

[edit]
Bedenk me opeens dat er nu wel eens een bug zou kunnen worden geintroduceerd, als de programmeur er van uitgaat dat de buffer leeg is, wat niet mag natuurlijk. Dat zie je dan vanzelf. :)

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.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Op maandag 19 november 2001 14:55 schreef farlane het volgende:
Hij zegt niet dat 'ie wsock.lb mist omdat 'ie niet copileert; linken gaat het ding pas doen nadat er geldige objectbestanden zijn. (Dat was je eerste opmerking/vraag :) )

Je tweede opmerking: Nee, ik kan je niet vertellen wat er fout gaat bij jou, want daarvoor mis ik de informatie.

Als je die code die ik gepost heb, plakt op de plaats waar het nu fout gaat _moet_ het ding copileren.

Note, de enige verschillen met de originele code zijn dus die declaraties van de buffers, waar nu 4 maal static voorstaat.
Die statics heb ik over het hoofd gezien, ik ga weer klungelen :).

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
zowaar, na een beetje kloten met static/const krijg ik ook de melding van wsock en hij compiled, joy :)
nu ff proberen dan maar..

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
suc6 :)

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.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Hij doet het wel.. Maar wel zeer apart.. eerste keer doet ie het gewoon, daarna showed ie maar 1 frame... leip ding..

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
1 frame van wat? :)

Overigens is het verstandig om na de declaratie van die bewuste buffers, alles te initialiseren op nul door voor elke buffer een:
code:
1
memset([buffer],0,sizeof([buffer]));

aan te roepen. Dit in veband met het feit dat de buffers, nu ze static zijn, niet meer elke keer op "" geinitialiseerd worden. Misschien dat dat wat met de genoemde verschijnselen te maken heeft?

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.

Pagina: 1