C: `Включить отладочные сообщения - PullRequest
4 голосов
/ 14 июля 2011

Возможно, это действительно глупый вопрос, но как мне включить эти отладочные сообщения в моем коде?

#ifdef DEBUG_MSG
    printf("initial state : %d\n", initial_state);
#endif

Заранее большое спасибо,

Ответы [ 5 ]

9 голосов
/ 14 июля 2011

При компиляции попробуйте что-то вроде этого:

$ gcc -DDEBUG_MSG -o foo foo.c
8 голосов
/ 14 июля 2011

Вы должны были бы #define это как-то.

0. В вашем коде.

Непосредственно в вашем коде, где-то перед использованием этого флага:

#define DEBUG_MSG

1. В командной строке.

Для каждого исходного файла или, соответственно, в вашем make-файле:

gcc -DDEBUG_MSG main.c

(Для gcc флаг -D<macro-name>, для MSVC - /D, для ICC - один из первых, в зависимости от вашей операционной системы.)

2. В вашей IDE где-то.

В настройках проекта вашей IDE найдите, где вы можете поместить определения. Под капотом это делается с помощью 1.

4 голосов
/ 14 июля 2011

#ifdef означает «Если определено», ваш код, по сути, говорит препроцессору проверить, определено ли DEBUG_MSG где-то еще.Если это так, он будет содержать код, который вы показали.

2 голосов
/ 14 июля 2011

Фаза препроцессора C будет передавать код внутри #ifdef/#endif только на фазу компилятора, если символ определен.

Обычно это можно сделать (как минимум) двумя способами.

Во-первых, необходимо использовать параметр командной строки для компилятора, например:

gcc -DDEBUG_MSG myprog.c

(-D означает определение символа препроцессора, следующего за ним, и, хотя это зависит от реализации, многие компиляторыиспользуйте тот же переключатель).Во-вторых, поместить строку типа:

#define DEBUG_MSG

внутри вашего фактического исходного кода где-то перед #ifdef.

Первый вариант обычно предпочтительнее, поскольку он позволяет вам контролировать это поведение безвнесение изменений в исходный код, чтобы, например, вы могли получить отладочную и выпускную сборки, сгенерированные из одного и того же исходного кода.

1 голос
/ 14 июля 2011

#ifdef сделает ваш макрос расширенным, только если определено DEBUG_MSG. Вы можете сделать это двумя способами. Либо сделайте #define DEBUG_MSG 1 в вашем исходном коде, либо скомпилируйте, используя -DDEBUG_MSG (при использовании gcc, есть аналогичные флаги и для других компиляторов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...