使用C语言自定义头文件,声明的变量或者函数用extern和不同extern修饰有什么区别?

这篇具有很好参考价值的文章主要介绍了使用C语言自定义头文件,声明的变量或者函数用extern和不同extern修饰有什么区别?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在C语言中,当在头文件中声明变量或函数时,使用extern和不使用extern修饰有以下区别:

  1. 使用extern修饰变量:
    • extern修饰的变量只是声明,不分配存储空间。它表示该变量的定义在其他源文件中,需要在使用该变量的源文件中进行定义和分配存储空间。
    • 不使用extern修饰的变量则是定义,会分配存储空间。它表示该变量的定义和分配存储空间在当前源文件中。

例如,假设我们有一个名为globals.h的头文件,其中声明了一个全局变量:

// globals.h

extern int globalVariable;

如果在另一个源文件中包含该头文件并使用该全局变量,需要在该源文件中进行定义和分配存储空间:

// main.c

#include <stdio.h>
#include "globals.h"

int globalVariable; // 定义和分配存储空间

int main() {
    globalVariable = 10;
    printf("The value of globalVariable is: %d\n", globalVariable);
    return 0;
}
  1. 使用extern修饰函数:
    • extern修饰的函数只是声明,表示该函数的定义在其他源文件中,需要在使用该函数的源文件中进行定义。
    • 不使用extern修饰的函数则是定义,表示该函数的定义和实现在当前源文件中。

例如,假设我们有一个名为functions.h的头文件,其中声明了一个函数:

// functions.h

extern int add(int a, int b);

如果在另一个源文件中包含该头文件并调用该函数,需要在该源文件中进行函数的定义和实现:

// main.c

#include <stdio.h>
#include "functions.h"

int add(int a, int b) { // 函数的定义和实现
    return a + b;
}

int main() {
    int result = add(3, 5);
    printf("The result is: %d\n", result);
    return 0;
}

总结来说,使用extern修饰变量或函数的声明表示其定义在其他源文件中,需要在使用的源文件中进行定义和实现。不使用extern修饰的变量或函数则表示其定义和实现在当前源文件中。

注(Q):头文件中声明的函数的默认的存储类别是extern吗?

是的,头文件中声明的函数的默认存储类别是extern

在C语言中,函数的默认存储类别是extern,即使没有显式地使用extern关键字进行声明。这意味着,如果在头文件中声明一个函数,它会被默认视为是一个在其他源文件中定义的函数。

例如,假设我们有一个名为functions.h的头文件,其中声明了一个函数:

// functions.h

int add(int a, int b); // 默认存储类别为extern

然后,在另一个源文件中包含该头文件,并在该源文件中定义和实现该函数:

// main.c

#include <stdio.h>
#include "functions.h"

int add(int a, int b) { // 在当前源文件中定义和实现函数
    return a + b;
}

int main() {
    int result = add(3, 5);
    printf("The result is: %d\n", result);
    return 0;
}

在这个例子中,我们没有在函数声明中使用extern关键字,但是函数add仍然被视为是一个在其他源文件中定义的函数。这是因为在C语言中,函数的默认存储类别是extern

需要注意的是,对于全局变量来说,默认存储类别也是extern,但是对于局部变量来说,默认存储类别是auto。因此,在头文件中声明全局变量时,也可以省略extern关键字。文章来源地址https://www.toymoban.com/news/detail-687973.html

到了这里,关于使用C语言自定义头文件,声明的变量或者函数用extern和不同extern修饰有什么区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包