나는 귀하의 질문에 올바르게 제목이 오해의 소지가 읽고 있어요 경우는 바이너리 모드를 지정하는 데 사용 모두 그들은 동일하지하지만 그들이 할 수있는 (그리고 종종)
Is #if MACRO equivalent to #ifdef MACRO?
해야 하나 또는 떨어져서. 내 의견으로는, 개인적인 취향의 문제입니다.
사용 모드를 확인 당신은 첫 번째 옵션을 사용하고 하나는
#define verbose true
또는
#define verbose false
하고이 중
#if verbose
또는
#if !verbose
사실, 참/거짓, C/C++ 값 (또는 될 수 있음) 및 전처리기에는 없기 때문에 TRUE 또는 1 대신 TRUE와 FALSE 또는 FALSE 대신 0을 사용할 것을 권장합니다. C/C++ 값에 대한 액세스
어쨌든, 바이너리 모드를 지정하는 다른 일반적인 방법은 플래그를 정의하거나 경우에 당신도
#define verbose any thing (including nothing) goes here
이 있거나 #DEFINE을 남길 수 있습니다 정의되지 않은 떠날 중 하나입니다.
다음 중 하나를
#ifdef verbose
또는 동등한
#if defined(verbose)
참고로, 플래그가 정의되어 있는지 여부를 테스트 할 수 있습니다 :이 경우, 플래그의 값을 테스트하지 않는 당신 정의되어 있는지 여부 만 테스트하면됩니다. 더 편리 경우
당신은 또한 플래그가
#ifndef verbose
또는 동등한 중 하나에 정의되지 여부를 테스트 할 수 있습니다
#if !defined(verbose)
이것은'# ifdef'와'if'를 비교하는 것 같고, 제목에서 알 수 있듯이'#if defined'가 아닌 것 같습니다. –
둘 사이의 차이점은 # ifdef는 단일 조건 인 만 사용할 수 있고 #if defined (NAME)는 복합 조건을 처리 할 수 있다는 것입니다. – LPs
BTW, 편집 후 코드가 다릅니다 :'# if' debug는'debug'가 true인지 확인하고'# ifdef'는'debug'가 정의 된 경우에만 검사합니다. – LPs