Препроцессор и не должен ни чего считать. Считает в итоге компилятор.
test.c
/* Memory regions usage */
#define ELINS_ZLIB_SIZE 262140U
#define ELINS_USB_SIZE 65536U
#define ELINS_ETH_SIZE 65536U
#define ELINS_STACK_SIZE 65536U
#define ELINS_SCREEN_SIZE 1048576U
#define ELINS_MEM_TOP 0x8f000000U //(unsigned int)(cpuboard_property->sdram_size)
#define ELINS_RESERVED1_BASE (ELINS_MEM_TOP- ELINS_SCREEN_SIZE)
#define ELINS_RESERVED2_BASE (ELINS_RESERVED1_BASE- ELINS_SCREEN_SIZE)
#define ELINS_SCREEN_BASE (ELINS_RESERVED2_BASE- ELINS_SCREEN_SIZE)
#define ELINS_ZLIB_BASE (ELINS_SCREEN_BASE- ELINS_ZLIB_SIZE)
#define ELINS_ETH_BASE (ELINS_ZLIB_BASE - ELINS_ETH_SIZE)
#define ELINS_USB_BASE ((ELINS_ETH_BASE - ELINS_USB_SIZE) | 0xa0000000) /* в некэшируемом адресном пространстве */
#define ELINS_STACK_BASE (ELINS_ETH_BASE - ELINS_USB_SIZE - ELINS_STACK_SIZE) /* grow down */
unsigned long test_test()
{
return ELINS_STACK_BASE;
}
gcc -E test.c
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
# 17 "test.c"
unsigned long test_test()
{
return ((((((0x8f000000U - 1048576U)- 1048576U)- 1048576U)- 262140U) - 65536U) - 65536U - 65536U);
}
Как можно заметить препроцессор ничего не считает
Скомпилируем исходник
gcc -s test.c
test_test:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
movl $-1899429884, %eax
popl %ebp
.cfi_def_cfa 4, 4
.cfi_restore 5
ret
.cfi_endproc
смотрим на строчку 8 и видим итоговое значение которое записывается в регистр, константу посчитал компилятор