[MD1] Actualizarea ANSI C / C ++ de la CW / 10 la CW / 11 | MacTech.com

De la: Ron Liechty ([email protected])

CodeWarriors,

Cu CW / 11 Metrowerks a schimbat Bibliotecile ANSI C si C ++ implicite dintr-

o versiune licentiata din Plum-Hall in bibliotecile detinute de Metrowerks. Aceste

biblioteci toate codurile sursa, precum si proiectele pe care le puteti modifica pentru a construi

biblioteci personalizate sunt localizate in folderul Biblioteca standard Metrowerks si

sunt denumite MSL C si MSL C ++. Inca mai furnizam (si vom

continua sa furnizam ceva timp) versiunile mai vechi ale

bibliotecilor ANSI C si C ++ . Acestea sunt localizate pe CD-ul CodeWarrior Tools din

folderul Metrowerks CodeWarrior: (Bibliotecile ANSI invechite).

Furnizarea propriilor noastre biblioteci ne permite sa livram codul sursa astfel incat utilizatorii care

doresc sa-si construiasca propriile biblioteci personalizate sau sa ajusteze codul furnizat pot

face acest lucru. In plus, standardul propus ANSI / ISO pentru C ++ este acum in

ultimele etape si aceasta noua biblioteca MSL C ++ este mai conforma decat versiunea

anterioara Plum Hall.

Daca actualizati proiecte mai vechi care se muta la aceste versiuni poate avea un

efect mic sau poate insemna mai multe modificari simple.

Va rugam sa cititi toate notele de lansare si intrebarile frecvente in anexa la aceasta nota.

NOTA: Inainte de a actualiza orice proiect, asigurati-va ca mai

intai salvati o copie a proiectului vechi . Actualizatorul nu va face acest lucru. Acest lucru este esential daca aveti

probleme si doriti sa va intoarceti la bibliotecile ANSI anterioare.

NU SE UTILIZA BIBLIOTECI ANSI.

Daca nu utilizati rutine de biblioteca ANSI din proiectul dvs., le puteti sterge

din proiect daca sunt prezente impreuna cu orice biblioteca SIOUX.

Este posibil sa fie nevoie sa eliminati aceste cai de acces.

Optional, poate doriti sa modificati biblioteca de rulare de la CPlusPlus.Lib

(pentru 68k) la MSL Runtime68k.LIb sau sa schimbati MWCRuntime.lib in MSL

RuntimePPC.Lib (pentru PowerPC). Runtimes-urile mai vechi sunt inca oferite, dar

aceasta schimbare poate fi utila pentru utilizari viitoare.

Array

Totusi, pentru a face acest lucru, va

trebui sa adaugati abort_exit.c la proiectul MSL runtime si sa reconstruiti

proiectul, acesta a fost uitat in ultima picatura pe CD.

BIBLIOTECE ANSI C UTILIZATE

Daca utilizati bibliotecile ANSI C din proiectul dvs., va trebui sa inlocuiti

versiunile ANSI C cu versiunile MSL. Daca utilizati biblioteci de 68k,

sunt furnizate doar anumite versiuni. Este posibil sa fie necesar sa va construiti propriile

biblioteci pentru a va configura setarile proiectului. (consultati intrebarile frecvente de mai jos).

Intrarea si iesirea consolei SIOUX sunt incorporate in Biblioteca MSL C, o biblioteca separata

nu mai este necesara.

Daca aveti biblioteci din proiectul dvs. legate de

anteturile sau bibliotecile mai vechi, va trebui sa le reconstruiti sau sa le reveniti la

bibliotecile mai vechi.

Va trebui sa schimbati biblioteca runtime de la CPlusPlus.Lib (pentru 68k)

la MSL Runtime68k.LIb sau sa schimbati MWCRuntime.lib in MSL RuntimePPC.Lib pentru

proiectele PowerPC.

Va trebui sa va ajustati caile de acces pentru a puncta MetWerker

CodeWarrior: Metrowerks Standard Library: folder MSL C. Daca recursiva este

oprita, veti dori, de asemenea, sa o setati pentru MSL C: MSL Common: Public

Include si MSL C: MSL Mac: Public Include folderele. Este posibil sa aveti nevoie,

dar probabil nu va trebui sa ajustati caile de acces pentru

bibliotecile ANSI lipsa .

Daca utilizati numai ANSI C Libraries si niciun MacToolbox, asigurati-va ca

fisierul dvs. de prefix de proiecte este setat la ansi_prefix.mac.h (aceasta setare este facuta in

preferintele proiectului: C / C ++ Setari de limba.

Daca utilizati MacToolbox si ANSI C, va trebui sa creati un fisier prefix.

Cel mai simplu este sa creezi propriul antet precompilat folosind

fisierul ansi_prefix.mac.h din bibliotecile standard Metrowerks: MSL C: MSL

Mac: Public Include folderul.

Anuleaza comentariile directivelor precompilatorului si

liniilor #include (MacHeaders.c) , selecteaza precompilarea din meniul proiectului si ia o ceasca de cafea.

Dupa ce a terminat, va cere un nume, il salvati cu un

nume descriptiv si il folositi pentru fisierul dvs. de prefix.

Pentru mai multe informatii despre crearea unui antet precompilat, cititi

Ghidul utilizatorilor IDE pagina 300 Crearea anteturilor precompilate.

ANSI C ++ BIBLIOTECI UTILIZATE

Daca utilizati bibliotecile ANSI C ++, trebuie sa faceti toate cele de mai sus pentru

bibliotecile ANSI C plus sa adaugati Biblioteca standard Metrowerks: MSL C ++ si

Biblioteca standard Metrowerks: MSL C ++: folderele de suport pentru biblioteci la

caile de acces.

Va trebui sa inlocuiti biblioteca ANSI C ++ cu biblioteca MSL C ++ corespunzatoare

.

Daca doriti sa utilizati optiunea activare de asistenta Bool, va trebui sa

va reconstruiti biblioteca MSL C ++. Daca o versiune a Bibliotecii nu este furnizata pentru

setarile dvs., va trebui sa construiti si o biblioteca C ++ personalizata (consultati Intrebarile frecvente de mai jos)

Este sugerat sa reconstruiti aceasta biblioteca cu linia dezactivata pana cand un patch este

eliberat pentru Compilatorul C / C ++.

PLANTARE CU ANSI

Va trebui sa faceti toate cele de mai sus pentru ANSI C si ANSI C ++ plus ca va

trebui sa faceti urmatoarele

Ar trebui sa recompilati fisierele de antet precompilate pentru a avea

setari de potrivire . Acest lucru se poate realiza folosind

fisiere antet precompilate personalizate (sau daca utilizati deja unul, ar trebui sa fiti intr-o forma buna).

Pentru clasele PP puteti face acest lucru pentru a crea fisierul cu antet precompilat.

Gasiti folderul Project Stationary in folderul stationar de baza PowerPlant

(68k sau PPC, nu conteaza). Veti vedea 2 fisiere acolo

„MyPP_DebugHeaders.pch ++ /. H”. Copiati aceste doua fisiere in

folderul proiectului . Adaugati fisierul .pch ++ la proiectul dvs. Accesati

Setarile de proiect, C / C ++ Setarile de limba ale proiectului. In campul de editare a fisierului prefix,

introduceti „MyPP_DebugHeaders.h” (fara ghilimele).

Nu uitati sa puneti un

#include (ansi_prefix.mac.h)

sau

#include (ansi_parms.h)

#define __dest_os __mac_os

in proiectul tau undeva. Pentru unii oameni, introducerea acestuia in

fisierul „MyPP_DebugHeaders.h” functioneaza bine. Pentru altii, l-au introdus in

fisierul .pch ++.

INSTALAREA VERSIUNII ANTERIOARE A ANSI C / C ++

Daca nu doriti sa actualizati la bibliotecile MSL C sau MSL C ++, puteti

alege sa reinstalati versiunile mai vechi. Acest lucru este recomandat celor care

mentin codul mai vechi.

copiati folderele Anteturile ANSI si anteturile STL din CD Instrumente Metrowerks

CodeWarrior: (Biblioteci ANSI invechite): folderul de asistenta INTO MacOS: folderul INTO antet in

folderul

Metrowerks CodeWarrior: Suport MacOS: folderul anteturi de pe

hard disk

copiati folderele ANSI 68K, ANSI PPC si SIOUX din CD Instrumente Metrowerks

CodeWarrior: (Bibliotecile ANSI invechite): folderul de asistenta INTO MacOS: folderul INTO

Libraries

in Metrowerks CodeWarrior: Suport MacOS: folderul Biblioteci de pe

hard disk

Puteti alege sa copiati papetarie de proiect vechi din versiunea CW / 10 a

CodeWarrior sau sa salvati proiectul existent in

folderul Metrowerks CodeWarrior (Project Stationery) din directorul secundar corespunzator ca papetarie.

Intrebari frecvente DESPRE BIBLIOTECA STANDARDUL METROWERKS

I: Am nevoie de o versiune A4 a bibliotecii mele, dar niciuna nu este furnizata ce ar trebui sa fac.

R: Metrowerks va furniza in curand mai multe biblioteci de pe site-ul nostru web pentru

descarcare sau poate doriti sa va creati propria biblioteca personalizata.

CUM SA CONSTRUITI BIBLIOTECILE PROPRIE

Deschideti folderul MSL si in folderul MSL C sau MSL C ++ veti gasi un

proiect de exemplu MSL C.68K.u. Deschideti acest proiect si modificati

urmatoarele setari.

Preferinte de proiect

Dati acestei biblioteci un nume descriptiv Va sugerez sa utilizati

conventiile de denumire Metrowerks , dar puteti folosi orice nume. Daca creati o

biblioteca relativa A4, trebuie sa o setati in aceasta preferinta.

C / C ++ Preferinte lingvistice

Setati aceste preferinte pentru a se configura cu setarile proiectelor dvs. Nota in

proiectele PowerPC acum activarea suportului bool necesita setari de biblioteca coincidente.

In prezent, recomandam ca linia sa fie dezactivata pana cand un patch este

eliberat in curand.

68k Preferente procesor

Setati aceste preferinte pentru a se potrivi cu setarile proiectului.

) Din meniul de proiect, selectati marca.

I: Timpul de compilare C ++ este lent, am crezut ca calculatorul meu s-a inghetat.

R: Da, datorita modului in care compilatorul face inline si a modului in care

este inscris MSL C ++ a dus la o perioada de construire excesiva, in special pe

masini mai lente de 68k. Metrowerks lucreaza la un plasture care va

fi disponibil in curand. Intre timp se recomanda sa-ti construiesti proiectele

cu inlining off.

De asemenea, poate doriti sa cresteti memoria cache a discului in

setarile Panoului de control al memoriei . A 1 – 2 Mb ar trebui sa va ajute daca il puteti economisi. Valoarea implicita este 96k,

care este inadecvata.

I: Codul a sarit ca marime

R: Acest lucru se datoreaza inlining-ului, Va rugam sa reconstruiti proiectul si

Biblioteca cu inlining-ul dezactivat. Acest lucru va reduce dimensiunea intr-o mare

masura. Metrowerks lucreaza la MSL C ++, precum si la Compilatori care

inlatura pentru a reduce acest lucru. Un plasture va fi disponibil in curand.

I: Cand compilez codul meu cu iostream am aparut o eroare in Vector.h

R: Papetul de proiect furnizat pe CW / 11 are incorect MacHeaders.h

ca fisier prefix. Va rugam sa schimbati acest lucru in ansi_prefix.mac.h acest lucru va

rezolva aceste probleme. Poate doriti sa modificati setarea si in pachetul de proiecte

pentru o utilizare viitoare.

I: Codul meu care a compilat amenda cu MSL in CW / 10 nu se mai compileaza cu

diverse erori cu vectori si iteratori.

R: A existat o schimbare majora in interfata containerului si obliga

declaratiile containerului sa se modifice astfel:

VECHI: vector (YOUR_OBJECT_TYPE) vect_i0;

NOU: vector (YOUR_OBJECT_TYPE, alocator (YOUR_OBJECT_TYPE))

vect_i0;

Retineti ca aceasta este pentru toate containerele, nu doar pentru vectori (lista, harta etc.)

De asemenea, daca aveti un tip non-standard (adica nu bool, scurt, u scurt, lung,

u lung, lung, etc.), va trebui sa faceti o

specializare iterator_traits pentru aceasta imediat dupa definitia acest tip (in orice

fisier .cpp este definit acest tip). (verificati pentru a va asigura ca ati inclus

si antetul (iterator.h))

faci asta cu aceasta forma

null_template

struct iterator_trait ( intrare nesemnata) {

typedef ptrdiff_t distance_type;

typeedef unsigned int value_type;

typedef random_access_iterator_tag iterator_category;

};

I: De cand am instalat MSL am aparut o eroare in exceptii.c

R: Aceasta nu este o problema cu MSL, aceasta este o problema cu inglobarea

Compilatorului C / C ++ care creeaza mai multe functii inline intr-un bloc de cod pe care il

poate detine manipularea interna a exceptiilor. Metrowerks lucreaza la un plasture

intre timp, inlantuindu-se.

I: De cand am actualizat la MSL vechiul meu cod care functiona pana acum raporteaza o

referinta de 32k este in afara erorii.

R: Acest lucru se datoreaza inclinarii, Metrowerks lucreaza la un plasture. In acelasi

timp , daca cotitura Incorporarea in afara dvs. de proiect nu functioneaza , atunci

va trebui sa reconstruiti bibliotecile cu Incorporarea off.

I: Am folosit console.stubs.c pentru a reduce dimensiunea aplicatiei mele cand

am folosit bibliotecile ANSI fara Consola I / O, ce ar trebui sa fac acum.

R: Console.stubs.c nu mai este necesara, deoarece initializarile sunt incorporate

in biblioteca MSL C si vor fi scoase de la linker.

I: M-am schimbat de la MWCRuntime la MSL RuntimePPC.Lib si acum am primit eroarea.

Eroare de legatura: „iesire” nedefinita (cod) mentionat

din „__start” in MSL RuntimePPC.Lib

R: Trebuie doar sa adaugati abort_exit.c la proiectul de rulare MSL si sa reconstruiti

proiectul, acesta a fost uitat in ultima picatura pe CD.

I: Nu pot folosi MSL si extractorul de intrare standard (cin))) pentru a introduce o

valoare zero .

R: Da, acesta este un bug in bibliotecile MSL C ++, care a fost corectat si va

aparea pe urmatorul patch in curand.

I: Am o eroare interna a compilatorului cu operands.c

R: Acesta este un bug din compilatorul C / C ++ atunci cand convertiti implicit un float

la un dublu, ca intr-o ecuatie de atribuire sau aritmetica. Aceasta a fost

corectata si va fi remediata in patch-ul care va iesi in curand. Intre timp

, munca in jur este de a utiliza pur si simplu duble in loc de tipuri de plutire.

Ron Liechty