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