C++
Také překladačů jazyka C++ je v RAD Studiu 10.2 sedm; dva z nich – BCC32 a BCC32C – jsou určeny pro Win32, další jsou pro ostatní cílové platformy. V současné verzi RAD Studia dosud není k dispozici překladač C++ pro Linux.
Překladač BCC32 je odvozen od BCC, původního šestnáctibitového překladače jazyka C++, který vyvinula firma Borland v devadesátých letech minulého století. Od něj je také odvozen překladač BCCOSX pro Mac OS X.
Všechny ostatní překladače C++ kromě BCC32 a BCCOSX jsou založeny na vstupní části („frontendu“) Clang a na infrastruktuře LLVM (Low Level Virtual Machine).
Přehled překladačů jazyka C++ v RAD Studiu, jejich cílových platforem a použitých verzí Clang a LLVM najdete v následující tabulce, kterou jsem převzal z dokumentace.
Překladač |
Cílová platforma |
Verze Clang |
Verze LLVM |
BCC32 |
Win32 | - | - |
BCCOSX | OS X | - | - |
BCC32C | Win32 | 3.3 | 3.3 |
BCC64 | Win64 | 3.3 | 3.3 |
BCCIOSARM | 32bitový iOS | 3.3 | 3.3 |
BCCIOSARM64 | 64bitový iOS | 3.3 | 3.5 |
BCCAARM | Android | 3.3 | 3.5 |
Překladač BCCIOSARM byl oproti předchozí verzi RAD Studia aktualizován (předchozí verze používala LLVM verze 3.1), ostatní jsou stejné jako v předchozí verzi.
Poznamenejme, že při vývoji aplikace pro Win32 můžeme volit, zda chceme původní překladač BCC32 nebo překladač BCC32C. Výchozí je BCC32; ke změně použijeme dialog s volbami projektu.
Rozdíly mezi překladači
Překladače založené na původním borlandském překladači BCC se od překladačů založených na Clang liší ve shodě se standardem jazyka – k tomu se vrátíme dále. Vedle toho se liší i v následujících ohledech:
- Přepínače, používané v příkazové řádce těchto překladačů, jsou výrazně odlišné.
- Překladače založené na Clang dovolují deklarovat implicitní hodnoty parametrů pouze v deklaraci funkce. Původní borlandské překladače je tolerují také např. v deklaraci ukazatele na funkci nebo na metodu.
- Překladače založené na Clang nedovolují použití operátoru sizeof v direktivě #if (to je v rozporu se standardem jak jazyka C, tak i jazyka C++). BCC32 to dovoluje.
- Překladače založené na Clang poněkud přísněji kontrolují konverze. Například v případě deklarace
char * p = "nějaký řetězec"; kterou BCC32 ponechá bez povšimnutí, ohlásí překladače založené na Clang varování, neboť automatická konverze typu const char* na typ char* patří mezi zavržené konstrukce.
Další informace lze najít na webových stránkách [3].
Komentáře