Отладка в C ++ - PullRequest
       3

Отладка в C ++

0 голосов
/ 11 января 2019

Я наткнулся на этот фрагмент кода. Можете ли вы объяснить, как использовать эту отладку в программе.

#ifdef TESTING 
#define DEBUG fprintf(stderr, "====TESTING====\n") 
#define VALUE(x) cerr << "The value of " << #x << " is " << x << endl 
#define debug(...) fprintf(stderr, __VA_ARGS__) 
#else 
#define DEBUG 
#define VALUE(x) 
#define debug(...) 
#endif 

1 Ответ

0 голосов
/ 11 января 2019

Я бы предпочел использовать правильный отладчик, чем эти макросы, но если вам действительно нужно их использовать, вот как вы это сделаете:

#include <iostream>

using namespace std; // better remove this and change the macro with cerr and endl instead
#define TESTING

#ifdef TESTING 
#define DEBUG fprintf(stderr, "====TESTING====\n") 
#define VALUE(x) cerr << "The value of " << #x << " is " << x << endl 
#define debug(...) fprintf(stderr, __VA_ARGS__) 
#else 
#define DEBUG 
#define VALUE(x) 
#define debug(...) 
#endif 

int main(int argc, char **argv) {
    int a = 100;
    DEBUG; // prints "====TESTING===="
    VALUE(a); // prints "The value of a is 100"
    debug("%d + %d = %d", 1, 2, 1 + 2); // prints "1 + 2 = 3"
    return 0;
}

Это даст вам следующий вывод:

====TESTING====
The value of a is 100
1 + 2 = 3

Если вы удалите #define TESTING, вы не получите ничего из этого вывода, поэтому вы можете удалить / установить его в зависимости от того, «тестируете» вы или нет.

В качестве альтернативы, обычно можно предоставить такие определения, используя систему сборки / IDE, где они могут быть автоматически установлены / сброшены в зависимости от контекста. Например, в Visual Studio:

enter image description here

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