#define, #ifdef #undef #endif

c, c-preprocessor, preprocessor-directive, visual-studio-2008

Solution

You are doing the build time equivalent of:

int x = 1;

int main()
{
    if (x)
    {
        ...
        x = 0;
    }
    else
    {
        ...
    }
}

ifdef, etc. happen at build time, but for your example, that's not an issue. Once you evaluate the if (either the runtime or build-time form), the decision about which branch to take it made. Changing something after the decision has been made does not change that decision.

Problem

I have the following code ``` #define PROC_ADD void main(void) { while(1) { #ifdef PROC_ADD // Do this code here then undefined it to run the code in the else // processing work #undef PROC_ADD #else // now that PROC_ADD has been undefined run this code // processing work #endif } } ``` However, it will run the code. But it won't run the code in the `else` after the `PROC_ADD` has been undefined. I think the reason could be that you can only define and undefine at compile time, and not at run-time. However, I am not really sure.

Original source