If I'm reading your question correctly the title is misleading, it should be
Is #if MACRO equivalent to #ifdef MACRO?
They are not equivalent but they can (and often are) both used to specify binary modes which are either on or off. The choice is, in my opinion, a matter of personal preference.
You are using the first option and either have
#define verbose true
or
#define verbose false
and then check the mode using either
#if verbose
or
#if !verbose
Actually, I would recommend you use either TRUE or 1 instead of true and either FALSE or 0 instead of false, because true and false, are (or can be) C/C++ values and the pre-processor doesn't have access to C/C++ values.
Anyway, the other common way to specify binary modes is to either define the flag or leave it undefined in which case you can have either
#define verbose any thing (including nothing) goes here
or leave out the #define.
and then you can test whether the flag is defined, either with
#ifdef verbose
or its equivalent
#if defined(verbose)
NOTE: In this case, you are not testing the value of the flag you only need to test whether it is defined.
If it is more convenient you can also test whether the flag is undefined with either
#ifndef verbose
or its equivalent
#if !defined(verbose)