Trong C/C++, các lệnh có # ở đầu là các lệnh tiền xử lý (preprocessor directive), các lệnh này được thực thi TRƯỚC khi trình biên dịch (compiler) biên dịch (compile) chương trình của bạn. Ví dụ: #define, #if, #include,...
Đoạn code nằm trong #if và #endif (cũng có thể là #else) chỉ được compile nếu thỏa điều kiện của một symbol (mình không biết tv gọi là gì cho phù hợp) nào đó được định nghĩa bằng #define. Ví dụ:
#define PI 3.14
#if PI>3.14
<code A>
#else
<code B>
#endif
Trong ví dụ trên code A sẽ không được compile vì symbol PI không lớn hơn 3.14 nhưng code B sẽ được compile vì #else thì đúng PI <= 3.14
#if 0 nghĩa là đoạn code trong nó sẽ luôn luôn không được compile, giống như ta tạm thời chuyển comment nguyên đoạn code đó ấy.
Sự khác nhau của #if và if: các câu lệnh if vẫn chỉ là các đoạn code bình thường và vẫn được compiler luôn luôn compile, còn #if thì được kiểm tra trước khi compile và nếu không thỏa thì có thể nói rằng đoạn code trong #if đó không có nằm trong chương trình của bạn :))
Ngoài ra còn nhiều các lệnh tiền xử lý (#) khác nữa nếu bạn muốn tìm hiểu thêm:
http://www.cplusplus.com/doc/tutorial/preprocessor/