On 14 Jun 2026, at 13:20, Dmitry Mityugov wrote:
> When included in C++ code, header file lib/packets.h delivers the
> following warning when compiled with GCC (16.1 and earlier versions):
>
> warning: invalid suffix on literal; C++11 requires a space between literal
> and string macro [-Wliteral-suffix]
>
> To reproduce this problem, its enough to run this command from the root
> of Open vSwitch repository:
>
> g++ lib/packets.h -Iinclude
>
> This patch fixes this by adding necessary spaces. It also disables C++
> name mangling for the C code by conditionally adding extern "C"
> directive.
>
> Signed-off-by: Dmitry Mityugov <[email protected]>
Hi Dmitry,
Thanks for the series, see a comment below.
//Eelco
> ---
> lib/packets.h | 27 +++++++++++++++++++--------
> 1 file changed, 19 insertions(+), 8 deletions(-)
>
> diff --git a/lib/packets.h b/lib/packets.h
> index ea0bda840..38318b771 100644
> --- a/lib/packets.h
> +++ b/lib/packets.h
> @@ -34,6 +34,10 @@
> #include "util.h"
> #include "timeval.h"
>
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> struct dp_packet;
> struct conn;
> struct ds;
> @@ -367,7 +371,8 @@ void add_mpls(struct dp_packet *packet, ovs_be16 ethtype,
> ovs_be32 lse,
> *
> */
> #define ETH_ADDR_FMT \
> - "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
> + "%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8 ":" \
> + "%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8
The coding style guide document states that we should not use
spaces here. Not sure if we still have antique printf()
implementations, however, could you not compile with
-Wno-literal-suffix? We could also do something with a
'clang/GCC diagnostic ignored' in the #ifdef, but not sure if
it's worth the overhead from an OVS perspective.
Ilya any thoughts on this?
> #define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
> #define ETH_ADDR_BYTES_ARGS(EAB) \
> (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
> @@ -381,8 +386,8 @@ void add_mpls(struct dp_packet *packet, ovs_be16 ethtype,
> ovs_be32 lse,
> *
> */
> #define ETH_ADDR64_FMT \
> - "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":" \
> - "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
> + "%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8 ":" \
> + "%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8
> #define ETH_ADDR64_ARGS(EA) ETH_ADDR64_BYTES_ARGS((EA).ea64)
> #define ETH_ADDR64_BYTES_ARGS(EAB) \
> (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], \
> @@ -400,7 +405,8 @@ void add_mpls(struct dp_packet *packet, ovs_be16 ethtype,
> ovs_be32 lse,
> * ...
> * }
> */
> -#define ETH_ADDR_SCAN_FMT
> "%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8
> +#define ETH_ADDR_SCAN_FMT "%" SCNx8 ":%" SCNx8 ":%" SCNx8 ":%" SCNx8 ":" \
> + "%" SCNx8 ":%" SCNx8
> #define ETH_ADDR_SCAN_ARGS(EA) \
> &(EA).ea[0], &(EA).ea[1], &(EA).ea[2], &(EA).ea[3], &(EA).ea[4],
> &(EA).ea[5]
>
> @@ -625,7 +631,7 @@ mpls_lse_to_bos(ovs_be32 mpls_lse)
> return (mpls_lse & htonl(MPLS_BOS_MASK)) != 0;
> }
>
> -#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
> +#define IP_FMT "%" PRIu32 ".%" PRIu32 ".%" PRIu32 ".%" PRIu32
> #define IP_ARGS(ip) \
> ntohl(ip) >> 24, \
> (ntohl(ip) >> 16) & 0xff, \
> @@ -642,15 +648,16 @@ mpls_lse_to_bos(ovs_be32 mpls_lse)
> * ...
> * }
> */
> -#define IP_SCAN_FMT "%"SCNu8".%"SCNu8".%"SCNu8".%"SCNu8
> +#define IP_SCAN_FMT "%" SCNu8 ".%" SCNu8 ".%" SCNu8 ".%" SCNu8
> #define IP_SCAN_ARGS(ip) \
> ((void) (ovs_be32) *(ip), &((uint8_t *) ip)[0]), \
> &((uint8_t *) ip)[1], \
> &((uint8_t *) ip)[2], \
> &((uint8_t *) ip)[3]
>
> -#define IP_PORT_SCAN_FMT "%"SCNu8".%"SCNu8".%"SCNu8".%"SCNu8":%"SCNu16
> -#define IP_PORT_SCAN_ARGS(ip, port) \
> +#define IP_PORT_SCAN_FMT "%" SCNu8 ".%" SCNu8 ".%" SCNu8 ".%" SCNu8 \
> + ":%" SCNu16
> +#define IP_PORT_SCAN_ARGS(ip, port) \
> ((void) (ovs_be32) *(ip), &((uint8_t *) ip)[0]), \
> &((uint8_t *) ip)[1], \
> &((uint8_t *) ip)[2], \
> @@ -1729,4 +1736,8 @@ BUILD_ASSERT_DECL(DNS_HEADER_LEN == sizeof(struct
> dns_header));
> #define DNS_CLASS_IN 0x01
> #define DNS_DEFAULT_RR_TTL 3600
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
> #endif /* packets.h */
> --
> 2.54.0
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev