gpt4 book ai didi

我可以通过在C语言中调用函数来初始化静态全局变量吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:53 24 4
gpt4 key购买 nike

我可以通过调用C语言中的函数来初始化静态全局变量吗?例如:

static int var_01 = fun();

当我在 VC6 中使用它时,它成功了。但它在 GCC 4.6.1 中失败了。这很奇怪。我想这种用法在 C89 中是非法的?还是其他原因造成的?

最佳答案

在 C99 中,据我所知,在 C89 中,具有静态存储持续时间的对象的初始化程序必须是常量表达式或字符串文字,来自草案 C99 标准部分 6.7.8 初始化:

All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals.

并且函数调用不是 6.6 Constant expressions 部分中的常量表达式,它说(强调我的):

Constant expressions shall not contain assignment, increment, decrement, function-call, or comma operators, except when they are contained within a subexpression that is not evaluated.98)

gcc 使用 -std=c99-std=c89 生成相同的错误,请注意我还使用了以下标志 -Wall -Wextra -pedantic.

在现代版本的 Visual Studio 编译器中,这在 C( see it live ) 中不起作用,但在 C++ 中却有效。所以可能是您在 Visual Studio 中将其编译为 C++。

关于我可以通过在C语言中调用函数来初始化静态全局变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25072259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com