如何在C中声明尚未定义的静态变量
如何在定义静态变量之前声明它?用例是在定义它之前有其他全局变量正在使用它。我不想把定义移到最上面 示例代码:如何在C中声明尚未定义的静态变量,c,compiler-construction,static,extern,C,Compiler Construction,Static,Extern,如何在定义静态变量之前声明它?用例是在定义它之前有其他全局变量正在使用它。我不想把定义移到最上面 示例代码: extern static int a; //compiler error, but I need to declare 'a' because it is used below by 'x' typedef struct{ int * dd; }X; static X x={&a}; //this variable needs to use 'a' static int
extern static int a; //compiler error, but I need to declare 'a' because it is used below by 'x'
typedef struct{
int * dd;
}X;
static X x={&a}; //this variable needs to use 'a'
static int a=5; //this is where 'a' defined
上面的代码是编译错误
==更新====
嗯,我自己找到了解决办法。只需删除extern
关键字。您试图一次使用两个。这是有问题的。使用静态int a代码>,您可以在文件中访问它,只需确保您在使用它的代码之上定义它。您试图一次使用两个。这是有问题的。使用静态int a代码>,您可以在文件中访问它,只需确保您在使用它的代码之上定义它。您试图一次使用两个。这是有问题的。使用静态int a代码>,您可以在文件中访问它,只需确保您在使用它的代码之上定义它。您试图一次使用两个。这是有问题的。使用静态int a代码>,您可以在文件中访问它,只需确保您在使用它的代码之上定义它。阅读
在您的示例中,变量在文件范围中声明为静态。这意味着文件中的所有代码都可以使用它
在这种情况下,在它使用的代码下面定义它是没有意义的。您只需将其移动到文件的顶部即可
如果出于某种原因需要这样做,也要进行检查。可能是提供的解决方案,可以根据您的更大目标进行调整。阅读
在您的示例中,变量在文件范围中声明为静态。这意味着文件中的所有代码都可以使用它
在这种情况下,在它使用的代码下面定义它是没有意义的。您只需将其移动到文件的顶部即可
如果出于某种原因需要这样做,也要进行检查。可能是提供的解决方案,可以根据您的更大目标进行调整。阅读
在您的示例中,变量在文件范围中声明为静态。这意味着文件中的所有代码都可以使用它
在这种情况下,在它使用的代码下面定义它是没有意义的。您只需将其移动到文件的顶部即可
如果出于某种原因需要这样做,也要进行检查。可能是提供的解决方案,可以根据您的更大目标进行调整。阅读
在您的示例中,变量在文件范围中声明为静态。这意味着文件中的所有代码都可以使用它
在这种情况下,在它使用的代码下面定义它是没有意义的。您只需将其移动到文件的顶部即可
如果出于某种原因需要这样做,也要进行检查。可能是提供的解决方案,可以根据您的更大目标进行调整。您不能在一个变量上使用两个存储类。
执行此操作将标记错误一个变量上不能使用两个存储类。
执行此操作将标记错误一个变量上不能使用两个存储类。
执行此操作将标记错误一个变量上不能使用两个存储类。
这样做将标记错误任何原因都不能重新排序静态int a代码>到顶部?但是为什么不在源文件的顶部声明static int a
,然后分配它呢?有什么问题吗?版主可能重复,请忽略我的标志进行重复。。。再想一想,我不认为这是一个复制品,我想知道它是如何实现的,或者它在C语言中是否可行。如果我们不能将static声明为extern,这看起来像是一个缺陷。原因何在?。如果允许外部静态,我看不出有问题。任何原因都不能对static int a进行重新排序代码>到顶部?但是为什么不在源文件的顶部声明static int a
,然后分配它呢?有什么问题吗?版主可能重复,请忽略我的标志进行重复。。。再想一想,我不认为这是一个复制品,我想知道它是如何实现的,或者它在C语言中是否可行。如果我们不能将static声明为extern,这看起来像是一个缺陷。原因何在?。如果允许外部静态,我看不出有问题。任何原因都不能对static int a进行重新排序代码>到顶部?但是为什么不在源文件的顶部声明static int a
,然后分配它呢?有什么问题吗?版主可能重复,请忽略我的标志进行重复。。。再想一想,我不认为这是一个复制品,我想知道它是如何实现的,或者它在C语言中是否可行。如果我们不能将static声明为extern,这看起来像是一个缺陷。原因何在?。如果允许外部静态,我看不出有问题。任何原因都不能对static int a进行重新排序代码>到顶部?但是为什么不在源文件的顶部声明static int a
,然后分配它呢?有什么问题吗?版主可能重复,请忽略我的标志进行重复。。。再想一想,我不认为这是一个复制品,我想知道它是如何实现的,或者它在C语言中是否可行。如果我们不能将static声明为extern,这看起来像是一个缺陷。原因何在?。如果允许外部静态,我看不出有什么问题。禁止外部静态的原因是什么?我认为原因只是因为关键字extern和static是同一类型(存储类),就像“float int”是非法的一样。但我认为“extern static”是合乎逻辑的(它说在这个文件下面的某个地方有一个静态变量)。@dragon135不,extern
并不意味着这一点。这意味着“在某个文件中有一个名为a
的变量”。这与static
(这意味着“您只能从该文件中访问此变量”)相矛盾。@user3477950制定附加规则并不困难,以便