C++ gcc:开关或pragma以抑制“%p";非空指针的格式警告?

C++ gcc:开关或pragma以抑制“%p";非空指针的格式警告?,c++,gcc,C++,Gcc,如果%p格式说明符的参数不是void*,是否有一个神奇的咒语可以防止gcc抱怨 pragma是理想的,因为我可以把它放在我的标准编译器配置头中,从而一劳永逸地保存问题,而不是每次都要处理project/make文件 通常情况下,我更喜欢在所有编译器中使用-Wall-Wextra-Wpedantic,因为clean source上的警告通常表明我犯了错误,或者编译器可能会丢失绘图。然而,我看不到用多余的强制转换(C风格,我已经多年没有使用过了,或者是超长的超混乱模式)来混乱我的源代码可能会有什么好

如果%p格式说明符的参数不是
void*
,是否有一个神奇的咒语可以防止gcc抱怨

pragma是理想的,因为我可以把它放在我的标准编译器配置头中,从而一劳永逸地保存问题,而不是每次都要处理project/make文件

通常情况下,我更喜欢在所有编译器中使用-Wall-Wextra-Wpedantic,因为clean source上的警告通常表明我犯了错误,或者编译器可能会丢失绘图。然而,我看不到用多余的强制转换(C风格,我已经多年没有使用过了,或者是超长的超混乱模式)来混乱我的源代码可能会有什么好处,所以这个特别的警告需要消除

附录:我知道typedef和/或模板可以将内联混乱减少到一个字母和一对paren,但它们需要额外的线外混乱。这就是噪音,它降低了清晰度和表现力,而不是改善它们


然而,我的选择是不要这个警告,我的目标是让它消失。无论如何,这是相当愚蠢的,因为实际发生的指针问题(近,远,基,无论什么)与指针的无效性是正交的。。。为了避免其他潜在的反对意见,我谈论的是纯数据指针,而不是函数指针、成员指针、闭包等等。如果我需要将某些东西移植到像Konrad Zuse的Z1这样的古怪平台,那么我可以调整编译器配置头,使其不会在特定平台上抑制该警告…

似乎没有这样的选项。GCC的
-Wformat
选项系列已记录在案(搜索
-Wformat
)。如果你想做什么,我希望它在这里找到。

我不认为C++标准保证< <代码> sixOf(空洞*)= = sisiof(t*)< /> >任何<代码> t>代码>(因此允许“胖指针”),所以我宁愿把这个警告放在心上。此外,您不需要(也不应该)使用C样式转换。应该使用
static_cast
。为什么要禁止显示警告,告诉您所做的事情是错误的?@Deduplicator但关键是C风格的cast非常核心,我们根本不清楚要处理的是哪种类型。至少,将(
static
-)强制转换包装到函数
中作为
,该函数只接受指向对象参数的指针。我认为C样式转换在清晰度上无法与as_void(my_ptr)竞争。在使用格式说明符
%p
时,将非
void*
传递给
printf()
是未定义的行为(根据7.21.6.1第8段:“…参数应是指向void的指针…”。你应该根据警告采取行动,而不是压制它。@MattMcNabb:它远远优于
cout