静的な外部変数とその使用方法を知る小さな例を試しています。静的変数はローカルスコープで、外部変数はグローバルスコープです。mの静的宣言は非静的宣言に従います
static5.c
#include<stdio.h>
#include "static5.h"
static int m = 25;
int main(){
func(10);
return 0;
}
static5.h
#include<stdio.h>
int func(val){
extern int m;
m = m + val;
printf("\n value is : %d \n",m);
}
GCC static5.cのstatic5.h
O/P:
static5.c:3: error: static declaration of m follows non-static declaration
static5.h:3: note: previous declaration of m was here
EDITEDは
正しいプログラム:
a.c:
#include<stdio.h>
#include "a1_1.h"
int main(){
func(20);
return 0;
}
a1.h:
static int i = 20;
a1_1.h:
#include "a1.h"
int func(val){
extern int i;
i = i + val;
printf("\n i : %d \n",i);
}
これは罰金完全に正常に動作します。しかし、これは1つのコンパイル単位にコンパイルされます。したがって、静的変数にアクセスすることができました。コンパイル単位全体では、extern変数を使用して静的変数を使用することはできません。
「extern int m;」は関数本体の外にあるべきではありませんか? – Kninnug
mはstatic5.cでstaticとして宣言されているため、スコープはfile.so内にあります。 –
だから質問は何ですか? mはstatic5.cファイルには静的なので、他の場所にアクセスすることはできません。'extern 'で宣言することさえできません。 – greydet