Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cleaning up C/C++ code reveals problems with variadic macros

We're doing some code cleanup, fixing signed/unsigned comparisons, running static analysis, etc, on the code base of C, C++, and Java.

One of the warnings we're getting is

warning: ISO C does not permit named variadic macros

And its companion warning

warning: ISO C99 requires rest arguments to be used

Now, in the C code I used the C99 standard variadic macro to fix the problem, but in the C++ code, what is the correct answer? Using the same C99 style results in a different warning

warning: anonymous variadic macros were introduced in C99 

For which I don't see any answers.

We're using GCC (G++) 4.4.3 in Linux.

I'm hoping there is some flag, or other method that can correct, or disable it for the specific section of code - but its for the logging which is used in almost every file...

like image 963
Petriborg Avatar asked Mar 19 '12 17:03

Petriborg


1 Answers

Use the gcc option -Wno-variadic-macros to disable that particular warning.

Edit: (from comments)

To disable the warning for a section of code but leave it on in general, use #pragma GCC diagnostic described here.

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wvariadic-macros"

    // Your code and/or include files
    // (No variadic warnings here)

#pragma GCC diagnostic pop
like image 107
Drew Dormann Avatar answered Sep 23 '22 03:09

Drew Dormann