Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Pohled pod kapotu JVM (3.část - pokračování popisu struktury souborů .class)

Jardik
Jardik (neregistrovaný) ---.113.broadband7.iol.cz
28. 12. 2011 19:57 Nový

chyba

celé vlákno

Opravte si prosím printf:

uint16_t index;
// ...
printf("\nClass name is stored in constant pool #%d\n", index);

na

printf("\nClass name is stored in constant pool #%" PRIu16 "\n", index);

nebo tam přidejte přetypování indexu na int.

Pavel Tišnovský aura:98
28. 12. 2011 22:15 Nový

Re: chyba

celé vlákno

Mate pravdu, diky za upozorneni, verze s makrem PRIu16 bude cistejsi (a mozna prezije i pouziti -pedantic :-).

IT
IT (neregistrovaný) ---.nds.ruhr-uni-bochum.de
2. 1. 2012 0:42 Nový

Re: chyba

celé vlákno

Není to chyba, C všechny výrazy s typem menším než int konvertuje na int. V printf tedy můžeme uvést "%d" a jako typ můžeme uvést něco menšího než int, ono se to na int zkonvertuje stejně při předání do funkce printf.

Chyba v předávání parametrů by to byla pouze v případě, že by int bylo menší než uint16_t (taková implementace C však ani neexistuje).

Jardik
Jardik (neregistrovaný) ---.113.broadband7.iol.cz
3. 1. 2012 13:37 Nový

Re: chyba

celé vlákno

Protože něco neexistuje, tak budeme předpokládat, že to nikdy nenastane, blahblahblah
Právě kvůli takovým, jako jste vy, vznikají nepřenositelné programy.

> C všechny výrazy s typem menším než int konvertuje na int.
To je mi novinka, pokud mi ji dokážete (např. nějakým výtažkem ze standardu (nejlépe C99)), tak se prohlásím za blba.

IT
IT (neregistrovaný) ---.nds.ruhr-uni-bochum.de
3. 1. 2012 21:06 Nový

Re: chyba

celé vlákno

C99, 6.3.1.1.2

The following may be used in an expression wherever an int or unsigned int may be used:

-- An object or expression with an integer type whose integer conversion rank is less than the rank of int and unsigned int.
-- A bit-field of type _Bool, int, signed int, or unsigned int.

If an int can represent all values of the original type, the value is converted to an int; otherwise, it is converted to an unsigned int. These are called the integer promotions. All other types are unchanged by the integer promotions.

Jardik
Jardik (neregistrovaný) ---.113.broadband7.iol.cz
4. 1. 2012 3:27 Nový

Re: chyba

celé vlákno

Prohlašuju se za blba.

Každopádně nadále budu používat správné formáty a nebudu funkci printf lhát. A pokud není někde standardem garantováno, že sizeof(uint16_t) < sizeof(int) (jakože já ho nikdy nečetl, ale vy ho třeba umíte zpaměti), tak je stejně 'nutné' ho použít.

Zasílat nově přidané příspěvky e-mailem