允许printf通过DEBUG标志

时间:2014-11-08 19:59:31

标签: c++ c debugging macros

如果我使用-g标志(g ++编译器)编译源文件,我想执行“一堆代码”,我在考虑这样的事情:

int main()
{
    // do some calculations...
    #if DEBUG
        fputs("MATRIX:\n", stdout);
        Print_Matrix(A, M, N);

        fputs("VECTOR:\n", stdout);
        Print_Vector(x, N);

        fputs("PARALLEL RESULT\n", stdout);
        Print_Vector(y, M);

        fputs("SERIAL RESULT\n", stdout);

        Print_Vector(y_serial, M);

    #else
        fprintf(stdout, "SIZE: %d x %d AND %d THREADS\n", M, N, NUM_OF_THREADS);
        fprintf(stdout, "TIEMPO CONC.:%d mseg\n", (int)final_par);
        fprintf(stdout, "TIEMPO SERIAL:%d mseg\n", (int)final_serial);
    #endif
}

目的是当矩阵的大小很小时我将以DEBUG模式运行,如果没有,那么我将打印执行时间(对于更大的矩阵)。 < / p>

问题是:如果我使用或不使用-g标志进行编译,它就不会打印有关矩阵或向量的信息。

1 个答案:

答案 0 :(得分:2)

如果您使用DEBUG作为标记进行编译,那么即使不是printf(),您也会执行fprintf()

请注意,-g不是这里要关注的那个,因为它只会生成调试信息,我们稍后可以利用调试器来利用它。


检查这个简单的例子。

px.c

#include <stdio.h>

int main(void)
{
    #if DEBUG
        printf("Somewhere DEBUG was feeded to this program\n");
    #else
        printf("Somewhere DEBUG was NOT feeded to this program\n");
    #endif
    return 0;
}

执行:

samaras@samaras-A15:~$ gcc -Wall px.c -o myexe
samaras@samaras-A15:~$ ./myexe
Somewhere DEBUG was NOT feeded to this program

samaras@samaras-A15:~$ gcc -Wall -DDEBUG px.c -o myexe
samaras@samaras-A15:~$ ./myexe
Somewhere DEBUG was feeded to this program