error: expected ‘)‘ before ‘PRIu64‘

在尝试使用CMake编译时遇到了宏未定义的错误。该问题源于<inttypes.h>中宏的定义条件。解决方法是通过在makefile中显式定义__STDC_FORMAT_MACROS宏。这符合ISO C99标准,只有在明确请求时才定义这些宏。添加宏定义后,编译问题应当得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

cmake 编译的时候, 报如标题的错误

查找原因

这个宏是定义在<inttypes.h> 当中的,这个头文件在toolchain当中很多位置都有,如何确定使用的是哪个?

  1. 使用
gcc -v test.cpp 

#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/5
 /usr/include/x86_64-linux-gnu/c++/5
 /usr/include/c++/5/backward
 /usr/lib/gcc/x86_64-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

gcc会告诉我们它是在哪个路径下找头文件

紧接着在对应的目录里面找到inttypes.h

  1. 奇怪

/* The ISO C99 standard specifies that these macros must only be
   defined if explicitly requested.  */
#if !defined __cplusplus || defined __STDC_FORMAT_MACROS

# if __WORDSIZE == 64
#  define __PRIu8               "u"
# define PRIu16         "u"
# define PRIu32         "u"
# define PRIu64         __PRI64_PREFIX "u"

在对应的头文件当中,这个宏确实是定义了的,那为什么呢?

这里有一行很重要的注释,看起来是CPP需要这个宏的时候,需要显式的定义__STDC_FORMAT_MACROS,那在我们的makefile里面加上这个宏定义就可以了

/* The ISO C99 standard specifies that these macros must only be
   defined if explicitly requested.  */
#if !defined __cplusplus || defined __STDC_FORMAT_MACROS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值