Hello all,

I was wondering if it is possible to improve the debugging information
generated by gcc when resolving C macros? Just as an example, when I
preprocessed the following C file:

extern int printf (__const char *__restrict __format, ...);

#define my_macro(i) \
  do { \
    *(i) = 1; \
    *(i) += 2; \
  } while(0)

int main(void)
{
    int i = 0;
    printf("i = %d\n", i);
    my_macro(&i);
    printf("i = %d\n", i);
    return 0;
}

I got the following output:

# 1 "test.c"
# 1 ""
# 1 ""
# 1 "test.c"
extern int printf (__const char *__restrict __format, ...);







int main(void)
{
    int i = 0;
    printf("i = %d\n", i);
    do { *(&i) = 1; *(&i) += 2; } while(0);
    printf("i = %d\n", i);
    return 0;
}

By adding a couple of "#" lines as follows I was able to much improve
the debugging experience:

# 1 "test.c"
# 1 ""
# 1 ""
# 1 "test.c"
extern int printf (__const char *__restrict __format, ...);







int main(void)
{
    int i = 0;
    printf("i = %d\n", i);
# 4 "test.c"
    do {
# 5 "test.c"
    *(&i) = 1;
# 6 "test.c"
    *(&i) += 2;
# 7 "test.c"
    } while(0);
# 14 "test.c"
    printf("i = %d\n", i);
    return 0;
}

I wonder whether this couldn't be done by the gcc preprocessor? Or does
standards compliance forbid this?
( [ http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html ] didn't
quite make this clear, and it isn't clear to me whether those "#" lines
are part of the standard.)

Regards,

Michael
                                          

Reply via email to