[elektro] Fw: C18 előfordító

Lajos Rancz lajos.rancz at gmail.com
Mon Jun 15 21:31:44 CEST 2015


Helló!

Itt több fogalom keveredik. A makró nem számol semmit, csak egyszerűen
behelyettesít; oda nem kerülhet ennek a kifejtése. A C szabvány szerint:
"Constant expressions shall not contain assignment, increment, decrement,
function-call, or comma operators, except when they are contained within a
subexpression that is not evaluated." - ergo az esetedben az egyenlőség jel
jobb oldala nem lehet konstans.

Már csak azért sem tudja, hogy a log(8)/log(2) az 3, mert a fordítási
egységben csak egy include van és emiatt csak a függvény definíciója áll
rendelkezésre (bármit lehet a log függvény belsejében /pl logolás/ nem vagy
köteles a libc-vel összelinkelni).

C++11-ben lehetséges olyan függvényeket írni (constexpr kulcsszó; de egy
rakat megkötés van rájuk) amelyek garantáltan kiszámolódnak fordítási
időben, de a math.h-ban definiált log nem ilyen, azt kénytelen vagy kézzel
megírni újra (pont a C-vel való kompatibilitás miatt).

Üdv

2015. június 15. 16:27 Balla zoltán írta, <sdrlab at yandex.ru>:

> Feladó: "Pipi" <lista at puzsar.hu>
> >Hali!
> >nekem nem világos hogy mit szeretnél
> >ha egyszer kifejezés/konstans akkor mi köze a memóriához
> >
> Egyszerű: ki kell számolnia neki az eredményt! De mivel minden operandus
> konstans, így maga az előfordító is megteheti ezt(meg is teszi)..., de
> persze csak akkor, ha a művelet egyébként beleférne a (program)memóriába
> is.
> Ha nem, akkor nem hajlandó megtenni, holott ehhez ugye nem használ egy
> utasításnyi memóriát sem a programban, hisz kioptimizálta jogosan.
> Erre szeretnék valami megoldást, hogy ne akarja látszólag se program
> memórióba pakolni a számítást, hisz arra nincs is szükség!
> De számolgatni sem én szeretném kézzel ami kell...tipikus macro...
>
> Zoli
>
> -----------------------------------------
>           elektro[-flame|-etc]
>


More information about the Elektro mailing list