开发者

GCC warning: ISO C does not permit named variadic macros

开发者 https://www.devze.com 2023-03-21 16:44 出处:网络
Using the following command gcc -c -Wall -Wextra -pedantic -ansi -std=c99 -fstack-protector-all -fstack-check -O3 root.c -orootTESTOBJECT

Using the following command

gcc -c -Wall -Wextra -pedantic -ansi -std=c99 -fstack-protector-all -fstack-check -O3 root.c -o  rootTESTOBJECT

I get the compiler warning root.h:76:22: warning: ISO C does not permit named variadic macros

72 #ifdef Debug
73 #inclu开发者_开发技巧de <stdio.h>
74 #define crumb(phrase0...) printf(phrase0)
75 #else
76 #define crumb(phrase0...) 
77 #endif

I believe the option -ansi -std=c99 allows the use of variadic macros, it does according to the docs anyway...

I have tried editing line 76 to

76 #define crumb(phrase0...) printf("")

to see if this fixed the warning but with no joy.

the compiler verion is Apple's gcc, version 4.2.1 I'm not sure if I need be too concerned by this but I really don't like warnings. What flag's am I missing ?


#define crumb(phrase0...) <whatever> is giving a name (phrase0) to the variable arguments (...).

This is a GCC extension.

C99 does define a way of passing variable arguments to macros (see §6.10.3/12 and §6.10.3.1/2): the variable arguments are unnamed on the left-hand side of the definitions (i.e. just ...), and referenced on the right-hand side as __VA_ARGS__, like this:

#define crumb(...) printf(__VA_ARGS__)

(By the way, your gcc arguments should not include both -ansi and -std=c99: -ansi specifies the earlier C standard (known variously as ANSI C, C89 or C90); the combination of both options only happens to select C99 in this case because -std=c99 appears after -ansi in the argument list, and the last one wins.)

0

精彩评论

暂无评论...
验证码 换一张
取 消