【问题标题】:Why doesn't the function stat() shadow the struct stat constructor in C++?为什么函数 stat() 不隐藏 C++ 中的 struct stat 构造函数?
【发布时间】:2018-07-26 02:18:36
【问题描述】:

如果我使用“g++ -Wshadow -c”编译以下代码:

struct foo
{
   int x;
};
void foo(char* x, struct foo* y);

我得到了预期:

警告:“void foo(char*, foo*)”隐藏了“struct foo”的构造函数 [-Wshadow]
void foo(char* x, struct foo* y);

为什么我在包含头文件“sys/stat.h”时没有收到相同的警告,该文件定义了“struct stat”和函数 stat()? gcc 是否知道 stat 并对其进行特殊处理,还是标题中的某些内容会抑制警告?

【问题讨论】:

    标签: g++ shadowing


    【解决方案1】:

    警告在系统标头中被无条件抑制(不仅仅是没有-Wsystem-headers):

      if (to_type != old_type
          && warn_shadow
          && MAYBE_CLASS_TYPE_P (TREE_TYPE (to_type))
          && !(DECL_IN_SYSTEM_HEADER (decl)
               && DECL_IN_SYSTEM_HEADER (to_type)))
        warning (OPT_Wshadow, "%q#D hides constructor for %q#D",
                 decl, to_type);
    

    如果您将其放入使用-isystem(而不是-I)指定的目录中的头文件中,您可以为您的示例重现此内容。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2012-05-06
      • 1970-01-01
      • 2020-05-27
      • 2021-08-26
      • 2015-06-02
      相关资源
      最近更新 更多