On Tue, Nov 10, 2015 at 04:21:10PM +0000, Richardson, Bruce wrote: > > > > -----Original Message----- > > From: Adrien Mazarguil [mailto:adrien.mazarguil at 6wind.com] > > Sent: Tuesday, November 10, 2015 4:08 PM > > To: Richardson, Bruce <bruce.richardson at intel.com> > > Cc: Stephen Hemminger <stephen at networkplumber.org>; Thomas Monjalon > > <thomas.monjalon at 6wind.com>; dev at dpdk.org > > Subject: Re: [dpdk-dev] [PATCH v3 2/4] ethdev: move error checking macros > > to header > > > > On Mon, Nov 09, 2015 at 02:02:28PM +0000, Richardson, Bruce wrote: > > [...] > > > > From: Adrien Mazarguil [mailto:adrien.mazarguil at 6wind.com] > > [...] > > > > Untested but I guess modifying that function accordingly would look > > like: > > > > > > > > static inline void > > > > rte_pmd_debug_trace(const char *func_name, const char *fmt, ...) { > > > > va_list ap; > > > > va_start(ap, fmt); > > > > > > > > static __thread char buffer[vsnprintf(NULL, 0, fmt, ap)]; > > > > > > > > va_end(ap); > > > > va_start(ap, fmt); > > > > vsnprintf(buffer, sizeof(buffer), fmt, ap); > > > > va_end(ap); > > > > rte_log(RTE_LOG_ERR, RTE_LOGTYPE_PMD, "%s: %s", func_name, > > > > buffer); } > > > > > > > > > > Looks a much better option. > > > > > > From this, though, I assume then that we are only looking to support the > > -pedantic flag in conjuction with c99 mode or above. Supporting -pedantic > > with the pre-gcc-5 versions won't allow that to work though, as variably > > sized arrays only came in with c99, and were gnu extensions before that. > > > > Right, -pedantic must follow a given standard such as -std=gnu99 otherwise > > it's meaningless. > > > > However pre-GCC 5 is fine for most if not all features we use, see: > > > > https://gcc.gnu.org/c99status.html > > > > Mixed code and declarations are supported since GCC 3.0, __VA_ARGS__ in > > macros since GCC 2.95 and variable length arrays since GCC 0.9, so as long > > as we use a version that implements -std=gnu99 (or -std=c99 to be really > > pedantic), it's fine. > > > > Besides DPDK already uses C99 extensively, even a few C11 features (such > > as > > embedded anonymous struct definitions) currently supported in C99 mode as > > compiler extensions. I think we can safely ignore compilers that don't > > support common C99 features. > > > > -- > > Adrien Mazarguil > > 6WIND > > Actually my point was slightly different. > If we are supporting "-pedantic" in header files because "we don't know what > compiler flags users are going to pass when", then we need to support it in > C90 mode to do the job properly. If you take gcc 4.8 and compile some code > with "-pedantic" as the only C-flag you are going to get lots of errors > because it will default to C90 mode with pedantic, which means no varargs > macros at all.
Agreed, exported headers should actually be C90 compliant for these reasons but C99 would be a start. I didn't know GCC 5 switched to C99 by default (don't worry, I do not intend to go back to C90). > This limits the usefulness of supporting pedantic flag at all in our header > files, since we only support it in certain situations with non-latest > compilers. I won't deny this, as the goal is partly to appease pedantic people like myself. Using standard methods for doing things should be preferred over extensions for compatibility with the unknown, unless there is no other way. -- Adrien Mazarguil 6WIND