【问题标题】:Why is enum data type always declared out of main() in c?为什么枚举数据类型总是在 c 中的 main() 之外声明?
【发布时间】:2018-09-09 11:22:09
【问题描述】:

为什么在 main() 函数中声明 enum 数据类型? 如果我们在 main() 中声明 enum 数据类型会发生什么?

https://www.geeksforgeeks.org/enumeration-enum-c/

【问题讨论】:

  • 与您通常在函数之外声明 struct 类型的原因相同。
  • 是的 - 他们通常需要比 main 更大的范围。
  • 通常是因为你有一个比单个函数大的程序,并且你想在几个不同的函数中使用enum

标签: c enums scope declaration


【解决方案1】:

枚举不必具有文件范围。枚举可以在块范围内声明。

这是一个演示程序。

#include <stdio.h>

enum E1 { N = 10 };

int main(void) 
{
    int a[N];

    enum E1 { N = 2 * N };

    int b[N];

    printf( "sizeof( a[] ) = %zu\n", sizeof( a ) );
    printf( "sizeof( b[] ) = %zu\n", sizeof( b ) );

    return 0;
}

它的输出是

sizeof( a[] ) = 40
sizeof( b[] ) = 80

考虑到根据 C 标准(6.2.1 标识符范围)

7 结构、联合和枚举标记的范围仅开始于 在标记出现在声明的类型说明符中之后 标签。 每个枚举常量的作用域都在 其定义枚举数在枚举数列表中的外观。 任何 其他标识符的范围在完成之后开始 它的声明者。

当枚举需要文件范围时,通常在函数外部声明枚举,即在多个函数中使用相同的枚举时,例如在参数声明列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多