например код:
1) #define PRIMERP 315
2) #define PRIMERF(V1 V2)(V1+2)*(V2+2)
int i = PRIMERP;
int j = PRIMERF(2,3);
хотелось бы уточнить 1 это своего рода константа а 2 это функция то же вроде константы и после компиляции cpp файла в exe файл, эти константы не будут включены в исполняемом файле,то есть если декомпилировать будет следующее
int i = 315;
int j = 20;
я правильно понимаю
Директива #define
сама по себе осуществляет только текстовую подстановку, но не предвычисление выражений с константами. То есть, если исправить объявление PRIMERF на корректное (у вас пропущена запятая):
#define PRIMERF(V1,V2) (V1+2)*(V2+2)
, то на этапе обработки препроцессором PRIMERF(2,3)
превратится в (2+2)*(3+2)
.
Предвычисление константного выражения может быть выполнено на этапе компиляции, но это не гарантируется. Скажем, Visual C++ выполняет его, в том числе и при отключенной оптимизации:
#include <stdio.h>
#include <stdlib.h>
#define PRIMERP 315
#define PRIMERF(V1,V2)(V1+2)*(V2+2)
int main(int argc, char **argv)
{
int i = PRIMERP;
int j = PRIMERF(2,3);
printf("%d %d",i,j);
;
getchar();
return 0;
}
/* Disassembly:
_main:
push ebp
mov ebp,esp
sub esp,8
push esi
mov dword ptr [j],0CCCCCCCCh
mov dword ptr [i],0CCCCCCCCh
mov dword ptr [i],13Bh // int i = PRIMERP;
mov dword ptr [j],14h // int j = PRIMERF(2,3);
mov esi,esp
mov eax,dword ptr [j]
push eax
mov ecx,dword ptr [i]
push ecx
push 0F05858h
call dword ptr ds:[0F092C0h] // printf("%d %d",i,j);
add esp,0Ch
cmp esi,esp
call _RTC_CheckEsp (0F01220h)
mov esi,esp
call dword ptr ds:[0F092C8h] // getchar();
cmp esi,esp
call _RTC_CheckEsp (0F01220h)
xor eax,eax
pop esi
add esp,8
cmp ebp,esp
call _RTC_CheckEsp (0F01220h)
mov esp,ebp
pop ebp
ret
*/
14h - это предвычисленное значение выражения (20 в шестнадцатеричном виде)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Разрабатываю программу, которая будет искать нужный элемент при помощи хэш-таблицыХэш-таблицу организую путём создания массива, состоящего...