#ifdefと#if #defineの違い

#include <stdio.h>
#define DEBUG
#ifdef DEBUG
    printf("DEBUGモードです。\n");
#endif
#define VERSION 2
#if VERSION >= 3
    printf("最新バージョンです。\n");
#else
    printf("古いバージョンです。\n");
#endif
***************************************
#include <stdio.h>
#define DEBUG
#define VERSION 2
#if defined(DEBUG) && VERSION >= 3
    printf("DEBUGモードかつ最新バージョンです。\n");
#elif defined(DEBUG) || VERSION >= 3
    printf("DEBUGモードまたは最新バージョンです。\n");
#else
    printf("通常モードかつ古いバージョンです。\n");
#endif