Tôi đang thử một ví dụ nhỏ để biết về biến bên ngoài tĩnh và cách sử dụng nó. Biến tĩnh là phạm vi cục bộ và biến bên ngoài là phạm vi toàn cục.khai báo tĩnh của m sau khai báo không tĩnh
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
Chương trình đúng:
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);
}
này hoạt động tốt hoàn toàn tốt đẹp. Nhưng điều này được biên dịch thành một đơn vị biên dịch đơn. Do đó có thể truy cập biến tĩnh. Trên đơn vị biên dịch, chúng ta không thể sử dụng biến tĩnh bằng cách sử dụng biến ngoài.
Không nên là 'extern int m;' nằm ngoài cơ quan chức năng? – Kninnug
m được khai báo là tĩnh trong static5.c và do đó phạm vi nằm trong tệp.so là lỗi. –
Vậy câu hỏi là gì? m là tĩnh đối với tệp static5.c, do đó không thể truy cập tệp đó ở bất kỳ nơi nào khác, thậm chí khai báo nó với 'extern' – greydet