#ifdef versus if for machine dependant code eg: #ifdef CONFIG_MACH_VR1000 foo; #endif or: if (machine_is_vr1000()) { foo; } The advantages for using if are: 1) The code always get parsed by the compiler, thus ensuring that the compile has not been broken by any updates, making it easier to check any updates. 2) Kernels can be built to support more than one machine, which reduces that the number of builds to test a given kernel. 3) Modern compilers will throw away the code if they can deduce the result of the if at compile time, thus negating the problem of unused code being place into the output. The machine_is_XXX() system will ensure that a false is given if the machine support is not being built into the kernel. 4) #if and #ifdef cause a bigger disruption to the code readability than the use of if.