Видимо, последнее. Эсобенности реализации компилятора. Очевидно, компилятор не может свернуть константы, если они не сгруппированы в выражении. Поэтому в дальнейшем придется писать код с учетом этих особенностей.
Кстати, я проверил на своем компиляторе для Z80
;static char *pdata, *p_lastbyte;;
;unsigned ext_net;
;p_lastbyte = pdata + sizeof (*pdata) - 1 - ext_net + 3;
;
; con int 000003
; add ptr
; id uns ext_net
; sub ptr
; id ptr pdata
; asg ptr
; id ptr p_lastbyte
;
ld hl,(_pdata)
ex de,hl
ld hl,(_ext_net)
ex de,hl
call CSUB$U
inc hl
inc hl
inc hl
ld (_p_lastbyte),hl
Правда, я данные определил несколько по-другому, получилось что sizeof равно 1, поскольку размер данных 1 байт (указатель на char).
Но константы компилятор у меня свернул.