找回密码
 立即注册
查看: 106|回复: 4

外部声明extern傻傻分不清

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:165
  • 最近打卡:2025-06-15 00:10:45

122

主题

161

回帖

359

积分

中级会员

积分
359
发表于 2025-6-3 10:49:26 | 显示全部楼层 |阅读模式
对与模块化编程,外部声明extern一直分不清。对与变量或函数,比如extern unsigned int a或extern void delary (),假设它们在第一个模块内,这里是指它要调用外面的unsigned int a和void delary (),还是模块自己内部的unsigned int a和void delary ()被别的模块调用?
回复

使用道具 举报 送花

3

主题

727

回帖

165

积分

等待验证会员

积分
165
发表于 2025-6-3 10:53:00 | 显示全部楼层
在模块化编程中,模块之间的数据共享通常是通过跨模块的外部声明实现的。具体来说,模块之间的变量和函数调用应当基于模块之间的接口,而不是外部声明。当模块B在模块A内部调用模块A的变量或函数时,模块B应当直接访问模块A,而不是外部声明。这样可以确保模块之间的数据一致性,避免数据冲突和边界条件错误。因此,跨模块的外部声明主要用于跨模块之间的数据共享,而模块内部的变量和函数应专注于模块内部的功能实现。这种设计方式有助于提高代码的可维护性和可扩展性,同时也符合模块化编程的核心原则。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

727

回帖

165

积分

等待验证会员

积分
165
发表于 2025-6-3 10:53:00 | 显示全部楼层
在C/C++语言中,extern 用于声明外部函数或变量的访问权限,而不是指函数或变量是否在模块内部或外部调用。以下是关于extern的详细说明:

1. 外部声明(extern)的作用
extern 用于声明外部函数或变量的访问权限。例如:
  1. c
  2. extern int func;  // 表示函数func可以在模块内部或外部调用
复制代码
extern 不是指函数或变量的调用模块,而是指函数或变量在模块中可以被访问的权限。

2. 模块内部调用变量或函数
假设模块A有一个变量unsigned int a,模块B在模块A内部调用这个变量,正确的调用方式是模块A内部调用模块B的变量。例如:
  1. c
  2. moduleA::unsigned int a;
  3. moduleB::moduleA::unsigned int a;  // 模块B在模块A内部调用模块A的变量
复制代码

相反,如果模块B在模块A外部调用模块A的变量,正确的调用方式是模块B在模块A外部调用模块A的变量。例如:
  1. c
  2. moduleB::moduleA::unsigned int a;  // 模块B在模块A外部调用模块A的变量
复制代码

3. 模块内部调用变量或函数
假设模块A内部有一个函数void delary(),模块B在模块A内部调用这个函数,正确的调用方式是模块B在模块A内部调用模块A的函数。例如:
  1. c
  2. moduleA::void delary();  // 模块A的函数在模块A内部调用
  3. moduleB::moduleA::void delary();  // 模块B在模块A内部调用模块A的函数
复制代码

相反,如果模块B在模块A外部调用模块A的函数,正确的调用方式是模块B在模块A外部调用模块A的函数。例如:
  1. c
  2. moduleB::void delary();  // 模块B在模块A外部调用模块A的函数
复制代码

4. 总结
extern用于声明外部函数或变量的访问权限。
在模块内部调用变量或函数时,调用模块内部的变量或函数。
在模块外部调用变量或函数时,调用模块外部的变量或函数。

因此,extern unsigned int a 表示变量unsigned int a可以在模块内部或外部调用,而模块内部调用变量或函数时,指变量或函数在模块内部调用。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:207
  • 最近打卡:2025-06-15 14:11:16
已绑定手机

67

主题

1906

回帖

4279

积分

荣誉版主

无情的代码机器

积分
4279
发表于 2025-6-3 11:07:49 | 显示全部楼层
extern 只是声明,具体定义可以在本文件,也可以在别的文件。
总之extern 可以出现在多个文件中,定义只定义一遍就行了。

建议买本C或C++ Primer Plus看看
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-06-15 09:46:00

733

主题

1万

回帖

1万

积分

管理员

积分
16603
发表于 2025-6-3 13:46:25 | 显示全部楼层
截图202506031345271013.jpg


截图202506031345567327.jpg

截图202506031346213459.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 04:20 , Processed in 0.177722 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表