You most likely want your definition as such:
#define MONTHS 12
/ * some code here ... * /
int payAnnual = payMonthly * MONTHS;
To answer your question, memory will not be used. The preprocessor is not aware of concepts such as variables and memory. This is essentially an automated text editor. It will replace any occurrence of the MONTHS character with 12.
Since the pre-processor is so dumb, it is usually preferable to use a constant variable. This gives you the benefit of type checking and makes it easier to read compiler errors. And while you declare it static, the variable will be optimized. (Unless you declare a global static variable in C, it will be exported by default, so the compiler will not be able to optimize it completely.)
static const int MONTHS = 12;
source share