Vra

Ek het 'n program in C met Ubuntu Linux en nou moet ek na die hawe dit oor 'n UNIX masjien (of wat ek glo aan 'n UNIX boks wees). Dit stel fyn op my Ubuntu met GCC maar toe ek probeer om dit op te stel met GCC op die boks UNIX, dit gee hierdie fout:

a.c: In function `goUpDir':
a.c:44: parse error before `char'
a.c:45: `newDir' undeclared (first use in this function)
a.c:45: (Each undeclared identifier is reported only once
a.c:45: for each function it appears in.)
a.c: In function `goIntoDir':
a.c:54: parse error before `char'
a.c:57: `newDir' undeclared (first use in this function)
a.c:57: `oldDir' undeclared (first use in this function)

Die grootste probleme lyk die parseerfout voor char (die ander verwant is)

wees
44  char newDir[50] = ""; 
54  char* oldDir = (char*)get_current_dir_name();

Dit is net eenvoudig C-styl snare verklarings. Is daar 'n kop-lêer wat ek nodig het om te sluit om dit te kry in UNIX om te werk?

post scriptum. Wat is die opdrag aan watter weergawe van Unix en watter weergawe van gcc jy gebruik sien? Wetende dat dit my sal toelaat om meer spesifiek in my vraag wees.

Dankie

Was dit nuttig?

Oplossing

As jy die opstel van suiwer C, moet veranderlikes verklaar word op die beggining van die funksies. Ek noem dit omdat die meeste mense hul C-programme met behulp van C ++ opstellers, wat dan bied 'n paar hulpbronne normaalweg nie beskikbaar om suiwer C opstellers, die mees algemene voorbeeld synde die // kommentaar lyne saam te stel.

Ander wenke

As jy wil om seker te maak jou kode is draagbaar altyd gebruik die -pedantic of -pedantic-foute.

Dit sal waarskuwings / foute waar jou kode dwaal van standaarde voldoen verskaf.

Terwyl ons op die onderwerp. Jy moet waarskynlik ook draai op al die waarskuwings. Daar is goeie redes waarom die samesteller jy waarsku; wanneer beweeg kode van die een platform na die ander hierdie waarskuwings is die bron van potensiële foute as die nuwe hardeware / OS / Compiler nie dieselfde kan optree as jou huidige een.

Gebruik ook die korrekte GCC frontend uitvoerbare: g ++ sal behandel * .c lêers soos C ++ lêers, tensy jy uitdruklik vertel dit nie te. So as jy die opstel van werklike C gebruik dan gcc nie g ++.

  

gcc -pedantic Wall -Werror * .c
  g ++ -pedantic Wall -Werror * Cpp

Om te help met jou spesifieke probleem kan lekker wees om lyn sien 43. Hoewel die fout sê lyn 44 'n baie probleme word veroorsaak deur die proses lyn met 'n probleem en die probleem nie deur die ontleder ontdek totdat jy die eerste lexeme op die volgende lyn.

Hoe het jy kopieer die lêer oor? Is dit moontlik dat jy iets wat nie daar moet wees plaas?

BTW:. Los jou gebruik van die kode tag in jou kode - dit is tans byna onmoontlik om te lees sonder die gebruik van "view source" in my browser

As for you einde vrae:

uname -a
gcc -v

Wanneer ek probeer om draagbare kode te skryf, sal die volgende samesteller vlae wat jy vertel oor 'n baie probleme voor jy so ver kry as probeer om die kode op die volgende platform te stel:

-std=c89 -pedantic -Wall

As jy net nodig het om te teiken GCC op ander platforms, geen ander samestellers, dan kan jy probeer:

-std=gnu89 -pedantic -Wall

Maar ek sou raai dit kan toelaat GNU uitbreidings op 'n nuwer GCC wat nie ondersteun op 'n ouer een. Ek is nie seker nie.

Let daarop dat hoewel dit sal lekker wees as -pedantic is gewaarborg om te waarsku oor alle nie-standaard programme, dit is nie. Daar is nog 'n paar dinge wat dit mis.

Jy sal hê om ons te voorsien met meer konteks vir die foute ... ten minste een, waarskynlik 'n paar lyne voor lyne 44 en 54. Op 'n raaiskoot, as u ons gee die kode van die aanvang van die funksie definisie voor lyn 44 (miskien lyn 40 of so) deur te reël 54 (of 'n paar lyne later - miskien lyn 60 - dan kan ons in staat wees om te help iets is met die inligting voor lyn 44 wat die oorsaak is dit iets anders as 'verwag. char 'by lyn 44;. ditto (waarskynlik dieselfde probleem) op lyn 54

Die inligting is onvoldoende. Die kode hierbo is ten minste so Inter en 'n mens moet weet as mense praat oor ANSI C89 of ANSI C99. Die eerste antwoord is verkeerd in daardie breë sin.

Groete Friedrich

Steve,

Die eerste fout boodskap sê "parse error before 'char'". Wat is die kode wat voorafgaan char? Is dit 'n funksie verklaring? Is dit sluit in enige gebruiker-gedefinieerde tipes of enigiets van die soort?

Die mees waarskynlike bron van hierdie fout is dat daar iets kort bo gebruik line 44 'n tipe of makro dit is verklaar in 'n kop-lêer ... wat kop lêer kan verskil tussen jou eie Ubuntu stelsel en die een wat jy probeer om op te stel op.

Wat UNIX is dit? AIX, Ultrix, Minix, Xenix?

GCC het 'n "--version" vlag:

gcc --version

Om die GCC weergawe vertoon:

gcc --version

Dit mag dalk help om die funksie te wys sodat ons die omliggende kode kan sien. Dit is dikwels die probleem met "parse fout voor" tipe foute.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top