c - 当 typedef 是全局而非局部时,为什么定义与函数同名的 typedef 会出错?

标签 c function enums typedef

当我编译第一个代码时,我没有得到任何错误

#include <stdio.h>

void bool_t(void)
{
    printf("This is a test\n ");
}

int main()
{
    typedef enum bool_t
    {
        false=0,true=1
    } bool_t;

    bool_t x = true;

    return 0;
}

但是当我编译第二个代码时出现错误

#include <stdio.h>

void bool_t(void)
{
    printf("la valeur est ");
}

typedef enum bool_t
{
    false=0,true=1
} bool_t;

int main()
{
    bool_t x = true;

    return 0;
}

错误是

错误:'bool_t' 重新声明为不同类型的符号

我真的很想了解第一段和第二段代码中到底发生了什么,以便更多地了解这两种实现的行为,因为我认为自己是 C 语言的初学者!

最佳答案

在第一种情况下,bool_t 是在函数作用域内声明的,因此它隐藏 来自外部作用域的声明。这很有用,因为这意味着向外部范围添加独立符号不会使您的函数无效。

在第二种情况下,您在同一范围(全局范围)中声明了两次 bool_t。这是不允许的。

关于c - 当 typedef 是全局而非局部时,为什么定义与函数同名的 typedef 会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768128/

相关文章:

python - 封闭函数范围搜索?

c - 查找 OpenGL 垂直回扫时序

比较字符串出错

function - 数学: get number of arguments passed to a function?

mysql - 尝试编写一个存储函数以在 mysql UPDATE SET 语句中使用

c++ - 枚举类的关系运算符重载

c - 数组访问算法是在编译时还是运行时完成的?

c++ - 堆栈(局部)或全局变量?

Scala-Play 表单 : Cannot find Formatter type class for Enumeration subtype

javascript - 如何将 C# 枚举列表传递和使用到 Javascript 文件并在其中使用