【问题标题】:Scope with functions in C [closed]C中的函数范围[关闭]
【发布时间】:2012-10-17 14:07:33
【问题描述】:

我正在尝试缩短主要功能。我需要回答一些问题(每行代码,在每个问题中,我需要使用在 main 中声明的变量) 但是使用函数,我知道如何使用的方式,不会有用,因为我需要在每个问题中使用很多变量,不同类型,而不是数组。 对不起我的英语,很难解释我需要什么。

这是我的代码与伪代码混合(简化)

int
main(void)
{
    int x = 4;
    int y = 5;
    float z = 6.8; // And lot of more variables like this

    answer_1;  //pseudocode
    answer_2:  

    return 0;
}

// 在 answer1 中有很多 printf 显示变量 x、y、z.... 等的值

// 在 answer1 中有很多 printf 显示变量 t、i、l.... 等的值)

【问题讨论】:

  • “我需要在函数内部使用 Main 中声明的变量。” - 等等,这不正是函数参数的用途吗?
  • 将那个或那些变量带到 main 的主体之外,作为 static int x = 4;。至少这样,它们的可见性仅限于当前编译单元(文件),而不是在整个项目中可见的全局变量。然而,即使是静态变量,一个比x 更能说明问题的变量名也可能是一个好主意。
  • 考虑使用结构和/或数组来减少要传递的参数数量。
  • @pmod 这是一个很短的主函数,我猜它甚至没有返回承诺的返回值..
  • @jotape 只需使用函数并传递参数。如果您有类似于全局选项的变量(例如解析的命令行参数),那么制作这些全局变量是非常好的做法。

标签: c function scope


【解决方案1】:

对于您发布的代码示例,传入 x 的最佳方式是作为函数的参数。

void func(int x);

int main(void)
{
    int x = 4;
    func(x);
    return 0;
}

void func(int x)
{
    printf("X = %d", x);
}

如果这在您的实际代码中不起作用,您能否发布一个更长的示例?

【讨论】:

  • 好的,但是如果 a 有 20 个变量要传递,不同的类型,而不是数组。我要做的是为需求列表中的每个答案调用一个函数(在我的示例中)。只是为了让我的老师对我的代码更具可读性。
  • 如果你有很多状态想要传递给不同的函数,我建议将值逻辑分组到structs,或指向结构的指针。变量之间是否存在逻辑组?例如,fooA、fooB、fooC,都可以存储在一个 struct foo 中,成员为 a、b、c。
  • 另外,如果您有 20 个参数,那么您可能需要将其分解为多个函数。如上所述,封装综合状态的 struct 方法也是可取的。
  • @Douglas 可能是我正在寻找的结构。我将深入研究 Structs。
【解决方案2】:

如果您不想将这些变量传递给函数,您也可以

【讨论】:

  • 致 OP:不要这样做。没有人这样写 C,这是有充分理由的。使用按预期方式传递的参数。
  • 可能值得指出的是,全局变量(静态和导出)通常是一种不好的做法,如果它们被用来替换函数参数,那就太可怕了。这就像在 OOP 语言中使用单例来传递方法参数...
  • @Joe 我正在学习;也许在我的示例中使用函数不是我所需要的。我将更改问题,以便它可以理解我的意图
  • 一个值得注意的例外:将真正共享的东西变成全局(或静态)变量是很正常的,比如从命令行参数解析的选项。基本上,在 OOP 语言中任何有意义的单例都是全局变量的良好候选者。
【解决方案3】:

尝试使用“另一个函数中的函数”

function main 将包含其他两个函数。 先定义变量,再写函数体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2016-05-28
    • 2017-08-16
    相关资源
    最近更新 更多