Aceasta este comanda c++decl care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
cdecl, c++decl - Compune declarații de tip C și C++
REZUMAT
cdecl [-a | -+ | -p | -r] [-ciqdDV]
[[ fișiere ...] | explica ... | declara ... | arunca ... | set ... | ajutor | ? ]
c++decl [-a | -+ | -p | -r] [-ciqdDV]
[[ fișiere ...] | explica ... | declara ... | arunca ... | set ... | ajutor | ? ]
explica ...
declara ...
arunca ...
DESCRIERE
Cdecl (Și c++decl) este un program pentru codificarea și decodarea declarațiilor de tip C (sau C++).
Limbajul C se bazează pe standardul ANSI X3J11 (propunerea propusă); opțional, C
limbajul se poate baza pe definiția pre-ANSI definită de Kernighan & Ritchie's C
Programare Limbă book, sau limbajul C definit de compilatorul Ritchie PDP-11 C.
Limbajul C++ se bazează pe cel al lui Bjarne Stroustrup C ++ Programare Limbă, plus
versiunea 2.0 adăugări la limbă.
OPŢIUNI
-a Utilizați dialectul ANSI C al limbajului C.
-p Utilizați dialectul pre-ANSI definit de cartea lui Kernighan & Ritchie.
-r Utilizați dialectul definit de compilatorul Ritchie PDP-11 C.
-+ Folosiți limbajul C++, mai degrabă decât C.
-i Rulați în modul interactiv (implicit când citiți de pe un terminal). Acesta de asemenea
activează solicitarea, editarea liniilor și istoricul liniilor.
-q Taci promptul. Dezactivează solicitarea în modul interactiv.
-c Creați cod compilabil C sau C++ ca rezultat. Cdecl va adăuga punct și virgulă la sfârșit
a unei declarații și a unei perechi de acolade până la sfârșitul unei definiții de funcție.
-d Activați informațiile de depanare (dacă sunt compilate).
-D Activați informațiile de depanare YACC (dacă sunt compilate).
-V Afișează informații despre versiune și ieși.
INVOCAT
Cdecl poate fi invocat sub un număr de nume diferite (fie prin redenumirea executabilului,
sau crearea unui link simbolic sau hard link către acesta). Dacă este invocată ca cdecl atunci ANSI C este
limba implicita. Dacă este invocată ca c++decl atunci C++ este implicit. Dacă este invocată
ca fie explica, arunca, Sau declara apoi va interpreta restul liniei de comandă
opțiunile ca parametri pentru acea comandă, executați comanda și ieșiți. Va face de asemenea
asta dacă primul argument non-switch de pe linia de comandă este una dintre aceste trei comenzi.
Intrarea poate veni și dintr-un fișier.
Cdecl citește fișierele denumite pentru declarații în limba descrisă mai jos. A
transformarea se face din limbajul respectiv în C (C++) sau pseudo-engleză. Rezultatele
aceste transformări sunt scrise pe ieșirea standard. Dacă niciun fișier nu este numit sau un nume de fișier
de ``-'' este întâlnit, intrarea standard va fi citită. Dacă intrarea standard provine de la a
terminal, (sau -i este utilizată opțiunea), un prompt va fi scris pe terminal înainte de fiecare
linia. Solicitarea poate fi dezactivată de -q opțiunea (sau set fara indemn comanda). Dacă
cdecl este invocat ca explica, declara or arunca, sau primul argument este una dintre comenzi
discutat mai jos, lista de argumente va fi interpretată conform gramaticii prezentate
de mai jos în loc de nume de fișiere.
Când rulează interactiv, cdecl folosește biblioteca GNU readline pentru a furniza cuvinte cheie
finalizarea și istoricul liniei de comandă, foarte asemănător pocni(1) (qv). Apăsarea TAB va
completați cuvântul cheie parțial înainte de cursor, cu excepția cazului în care există mai multe posibile
finalizare, caz în care un al doilea TAB va afișa lista de posibile completări și
reafișează linia de comandă. Tastele săgeți stânga și dreapta și backspace pot fi folosite pentru
editarea într-un mod natural, iar tastele săgeți sus și jos preiau liniile de comandă anterioare
din istorie. Majoritatea celorlalte taste familiare, cum ar fi Ctrl-U pentru a șterge tot textul din
cursorul înapoi la începutul liniei, funcționează așa cum era de așteptat. Există o ambiguitate între
il int și în cuvinte cheie, dar cdecl vei ghici la care te-ai referit și ghiceste mereu
corect.
Poți să folosești cdecl pe măsură ce creați un program C cu un editor ca vi(1) sau emacs(1). Tu
pur și simplu introduceți versiunea pseudo-engleză a declarației și aplicați cdecl ca filtru
la linie. (În vi(1), tastați ``!!cdecl''.)
În cazul în care crea program opțiune -c este utilizat, rezultatul va include punct și virgulă după
declarații de variabile și perechi de acolade după declarațiile de funcție.
-V opțiunea va tipări numerele de versiune ale fișierelor utilizate pentru a crea procesul.
Dacă sursa este compilată cu informațiile de depanare activate, fișierul -d opțiunea va activa
acesta să fie scos. Dacă sursa este compilată cu informațiile de depanare YACC activate, fișierul
-D opțiunea va permite să fie scoasă.
COMMAND LIMBA
Există șase afirmații în limbă. The declara instrucțiunea alcătuiește un tip C
declarație dintr-o descriere verbosă. The arunca instrucțiunea compune un cast de tip C ca
ar putea apărea într-o expresie. The explica instrucțiunea decodifică o declarație de tip C sau
distribuție, producând o descriere detaliată. The ajutor (Sau ?) declarația oferă un ajutor
mesaj. The părăsi (Sau ieşire) (sau sfârșitul fișierului) iese din program. The set
instrucțiunea permite setarea interactivă a opțiunilor liniei de comandă. Fiecare afirmație este
separate prin punct și virgulă sau linie nouă.
SINONIME
Unele sinonime sunt permise în timpul unei declarații:
caracterul este un sinonim pentru char
constantă este un sinonim pentru const
enumerarea este un sinonim pentru enum
func este un sinonim pentru function
integer este un sinonim pentru int
ptr este un sinonim pentru pointer
ref este un sinonim pentru referință
ret este un sinonim pentru returnare
structure este un sinonim pentru struct
vector este un sinonim pentru matrice
Funcția de completare TAB știe numai despre cuvintele cheie din coloana din dreapta a
structura, nu cele din coloana din stânga. Completarea TAB este mult mai puțin utilă atunci când
caracterele principale ale diferitelor cuvinte cheie sunt aceleași (cuvintele cheie sunt în contact cu unul
altul), iar introducerea ambelor coloane ar cauza destul de multe conflicte.
GRAMATICĂ
Următoarea gramatică descrie limbajul. În gramatică, cuvintele din „<>” nu sunt
terminale, cuvintele cu minuscule goale sunt terminale care sunt singure. Majuscule goale
cuvintele sunt alte simboluri lexicale: NIMIC înseamnă șirul gol; NUME înseamnă un identificator C;
NUMĂR înseamnă un șir de cifre zecimale; iar NL înseamnă linia nouă sau punct și virgulă
caractere.
::= NIMIC
| NL
::= NIMIC
| declara NAME ca
| declara
| aruncați NAME în
| turnat
| explica
| explica
| explica ( ) opțional-NUME
| a stabilit
| ajutor | ?
| părăsi
| Ieșire
::= matrice de
| matrice NUMBER din
| revenirea funcției
| functie ( ) revenind
| pointer spre
| pointer către membrul clasei NAME
| trimitere la
|
::=
| *
| NUME :: *
| &
::= ( )
| ( )
| [ ]
| [ NUMĂR ]
| ( )
| NUME
::= NIMIC
| ( )
| ( ) ( )
| ( ) ( )
| ( )
| NUME :: *
| *
| &
| [ ]
| [ NUMĂR ]
::= |
|
| structura NUME | sindicat NUME | enumerarea NUME | numele clasei
::= ,
|
|
::= ,
| NIMIC
|
|
| la fel de
::= int | char | dublu | plutire | gol
::= |
::= scurt | lung | nesemnat | semnat |
::= | NIMIC
::= const | volatil | noalias
::= auto | extern | înregistrare | static
::= NIMIC |
::= NIMIC |
| crea | nocreate
| prompt | fara indemn
| ritchie | preansi | ansi | cplusplus
| depanare | nodebug | yydebug | noyydebug
SET OPŢIUNI
set comanda are mai multe opțiuni. Puteți tasta set or set Opțiuni Pentru a vedea
opțiunile selectate în prezent și un rezumat al opțiunilor disponibile. Primul
patru corespund la -a, -p, -r, și -+ opțiunile liniei de comandă, respectiv.
ansi Utilizați dialectul ANSI C al limbajului C.
preansi
Utilizați dialectul pre-ANSI definit de cartea lui Kernighan & Ritchie.
Ritchie
Utilizați dialectul definit de compilatorul Ritchie PDP-11 C.
cplusplus
Utilizați limbajul C++, mai degrabă decât C.
[nu]prompt
Activați sau dezactivați promptul în modul interactiv.
[nu]creați
Activați sau dezactivați adăugarea de puncte și virgulă sau acolade la declarații
ieșire de cdecl. Aceasta corespunde cu -c opțiune linie de comandă.
[nu]depanare
Activați sau dezactivați informațiile de depanare.
[nu]yydebug
Activați sau dezactivați informațiile de depanare YACC.
Notă: informațiile de depanare și informațiile de depanare YACC sunt disponibile numai dacă au
fost compilat în cdecl. Ultimele două opțiuni corespund -d și -D Linie de comanda
opțiuni, respectiv. Informațiile de depanare sunt utilizate în mod normal în dezvoltarea programelor și
nu este în general compilat în executabile distribuite.
EXEMPLE
Pentru a declara o matrice de pointeri către funcții care sunt asemănătoare malloc(3), face
declarați fptab ca matrice de pointer la funcție returnând pointerul la char
Rezultatul acestei comenzi este
char *(*fptab[])()
Când vedeți această declarație în codul altcuiva, puteți înțelege prin
face
explica caracterul *(*fptab[])()
Declarația corespunzătoare pentru semnal(2), ignorând prototipurile de funcții, este ușor descris în
cdecllimba lui:
declară semnal ca funcție care returnează pointerul la funcția returnând nulă
care produce
void (*semnal())()
Declarația funcției care rezultă are două seturi de paranteze goale. Autorul lui
o astfel de funcție s-ar putea întreba unde să pună parametrii:
declară semnalul ca funcție (arg1,arg2) returnând pointerul la funcție returnând void
oferă următoarea soluție (când rulați cu -c opțiune):
void (*semnal(arg1,arg2))() { }
Dacă vrem să adăugăm în prototipurile funcției, prototipul funcției pentru o astfel de funcție
as _Ieșire(2) se va declara cu:
declară _exit ca funcție (revaloare ca int) returnând void
oferindu-
void _exit(int retvaloare) { }
Ca exemplu mai complex folosind prototipuri de funcții, semnal(2) ar putea fi pe deplin definită ca:
declarați semnalul ca funcție (x ca int, y ca indicator către funcția (int) returnând void)
returnarea indicatorului la function(int) returnarea void
dând (cu -c)
void (*signal(int x, void (*y)(int )))(int ) { }
Cdecl vă poate ajuta să aflați unde să puneți modificatorii „const” și „volatile”.
declaraţii, deci
declară foo ca pointer către const int
oferă
const int *foo
în timp ce
declară foo ca indicator const către int
oferă
int * const foo
C++ decl poate ajuta la declararea referințelor, astfel
declarați x ca referință la pointer la caracter
oferă
char *&x
C++ decl poate ajuta cu pointeri către un membru al claselor, declarând astfel un pointer către an
membru întreg al unei clase X cu
declara foo ca pointer către membru al clasei X int
oferă
int X::*foo
și
declara foo ca pointer către un membru al funcției de clasă X (arg1, arg2) care returnează pointerul
la clasa Y
oferă
clasa Y *(X::*foo)(arg1, arg2)
DIAGNOSTIC
Declarațiile de declarare, exprimare și explicație încearcă să evidențieze construcții care nu sunt
susținut în C. În unele cazuri, se face o presupunere cu privire la ceea ce a fost cu adevărat intenționat. În aceste
cazuri, rezultatul C este o declarație de jucărie a cărei semantică va funcționa numai în Algol-68. The
lista de constructe C neacceptate depinde de versiunea limbajului C
utilizat (consultați opțiunile ANSI, pre-ANSI și Ritchie). Setul de constructe C++ acceptate
este un superset al setului ANSI, cu excepția noalias cuvinte cheie.
REFERINȚE
Standard ANSI X3.159-1989 (ANSI C)
ISO/IEC 9899:1990 (standardul ISO)
Întrebările frecvente comp.lang.c
http://www.eskimo.com/~scs/C-faq.top.html
Secțiunea 8.4 din Manualul de referință C din C Programare Limbă de B. Kernighan &
D. Ritchie.
Secțiunea 8 a Manualului de referință C++ din C ++ Programare Limbă de B.
Stroustrup.
Avertismente
Sintaxa pseudo-engleză este excesiv de verbosă.
Există o mulțime de verificări semantice care nu se fac.
Cdecl a fost scris înainte de finalizarea standardului ANSI C și nu a fost făcută nicio încercare
pentru a o aduce la zi. Cu toate acestea, este foarte aproape de standard, cu ceea ce este evident
excepție de noalias.
Cdecldomeniul de aplicare al lui este în mod intenționat mic. Nu vă ajută să vă dați seama de inițializări. Aceasta
se așteaptă ca clasele de stocare să fie la începutul unei declarații, urmate de
modificatori const, volatile și noalias, urmați de tipul variabilei. Cdecl
nu știe nimic despre listele cu argumente cu lungime variabilă. (Acest lucru include ``, ...''
sintaxă.)
Cdecl crede că toate declarațiile pe care le rostiți vor fi folosite ca definiții externe.
Unele contexte de declarație în C permit mai multă flexibilitate decât aceasta. Un exemplu în acest sens este:
declara argv ca matrice de matrice de char
Unde cdecl răspunde cu
Avertisment: neacceptat în C -- „Matrice interioară de dimensiune nespecificată”
(poate vrei să spui „matrice de pointer”)
char argv[][]
Sprijin provizoriu pentru noalias cuvântul cheie a fost introdus pentru că era în proiectul ANSI
caietul de sarcini.
AUTORI
Scrisă inițial de Graham Ross, îmbunătățită și extinsă de David Wolverton, Tony Hansen,
și Merlyn LeRoy.
Suport GNU readline și port Linux de David R. Conrad,[e-mail protejat]>
Utilizați c++decl online folosind serviciile onworks.net