Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用函数调用初始化静态变量会导致编译错误吗? #包括 int foo(){ 返回1; } 内部主(空){ 静态int q=foo(); 返回0; } 这是C代码而不是C++。它编译和运行在C++中,而不是C._C_Static - Fatal编程技术网

用函数调用初始化静态变量会导致编译错误吗? #包括 int foo(){ 返回1; } 内部主(空){ 静态int q=foo(); 返回0; } 这是C代码而不是C++。它编译和运行在C++中,而不是C.

用函数调用初始化静态变量会导致编译错误吗? #包括 int foo(){ 返回1; } 内部主(空){ 静态int q=foo(); 返回0; } 这是C代码而不是C++。它编译和运行在C++中,而不是C.,c,static,C,Static,此代码出现编译错误。有人能解释一下为什么会出错吗?静态成员只能由常量值初始化吗?在C++中,我们需要在声明静态成员之后定义静态成员,为什么在C中不需要这些成员?我找不到任何具有类似查询或良好答案的线程 全局变量和静态变量只能用编译时已知的常量表达式初始化。调用foo()函数并不构成使用常量表达式。此外,未指定全局变量和静态变量的初始化顺序。通常,调用foo()意味着必须有一定的顺序,因为函数可以合理地预期其他一些变量已经初始化 在C语言中,两个代码都不是在main()之前执行的 在C++中,有方

此代码出现编译错误。有人能解释一下为什么会出错吗?静态成员只能由常量值初始化吗?在C++中,我们需要在声明静态成员之后定义静态成员,为什么在C中不需要这些成员?我找不到任何具有类似查询或良好答案的线程

全局变量和静态变量只能用编译时已知的常量表达式初始化。调用
foo()
函数并不构成使用常量表达式。此外,未指定全局变量和静态变量的初始化顺序。通常,调用
foo()
意味着必须有一定的顺序,因为函数可以合理地预期其他一些变量已经初始化

在C语言中,两个代码都不是在
main()
之前执行的


<>在C++中,有方法,但在C.</P> < P>中,如果你在C中做这件事而不是C++,你只能分配静态变量,这些值在编译时可用。因此,不允许使用foo(),因为它的值在运行时才确定。

所有静态变量都是编译时的,函数在运行时给出输出,因此您使用运行时变量初始化编译时变量,这是不可能的,因此它给出错误

另一个例子可能如下所示

#include <stdio.h>
int foo(){
    return 1;
}
int main(void) {
    static int q = foo(); 
    return 0;
}

上面的代码也给出了编译时错误,原因与上面相同。

您能指出那些编译错误吗?@iammilind用C试试。我这里说的是C。我将在主体中编辑它。不是一个精确的副本,但是关闭:@h4ck3d如下所述,全局变量和静态变量只能在编译时用已知的常量表达式初始化。所以你可以做,
int(*q)(void);q=foo。这应该在C中起作用。什么是IOW?C++中,第一类加载发生了吗?我不理解C++类的东西,但是C++中的全局/静态对象是在代码>主()/<代码>之前构造的,这给了你一个在初始化时调用函数的机会。C++中有一些初始化顺序的规则,或者这在C++中也不适用。@ AlxyFrunZes是的,就像java一样。同样,即使在输入
main
之前,也可以打印到
stdout
。将
System.out.println
调用放入静态初始化块中。
int main()
{
int p=9;
static int x=p;
}