如何在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制定附加规则并不困难,以便