【发布时间】:2023-09-04 13:41:01
【问题描述】:
我对外部概念不熟悉。今天在工作中,我遇到了大量在头文件中声明的外部函数; foo.h.在一堆文件夹的某个地方,我找到了一个 foo.c 文件,其中包含所述函数的定义,但它没有 #include foo.h。回到家后,我决定尝试使用外部存储类示例。在“C书”中做了一些阅读之后,这就是我想出的。
这是我没想到的。但确实如此。
main.c
#include <stdio.h>
int data;
int main()
{
data = 6;
printf("%d\n", getData());
data = 8;
printf("%d\n", getData());
return 0;
}
externs.c
int getData()
{
extern int data;
return data;
}
重击
gcc main.c externs.c -o externs
我认为这不会起作用,因为该函数在技术上(或至少是冗长的)在 main 之前没有定义。这是否可行,因为int getData() 的默认存储类是extern?如果是这样,为什么还要费心下面的例子(类似于我在工作中看到的)?
main2.c
#include <stdio.h>
#include "externs.h"
int data;
int main()
{
data = 6;
printf("%d\n", getData());
data = 8;
printf("%d\n", getData());
return 0;
}
externs.h
#ifndef _EXTERNSH_
#define _EXTERNSH_
extern int getData();
#endif
externs.c
int getData()
{
extern int data;
return data;
}
重击
gcc main2.c externs.c -o externs
【问题讨论】:
-
能否在每种情况下添加或评论输出?
标签: c scope extern storage-class-specifier