cjtdz 发表于 2025-6-3 10:49:26

外部声明extern傻傻分不清

对与模块化编程,外部声明extern一直分不清。对与变量或函数,比如extern unsigned int a或extern void delary (),假设它们在第一个模块内,这里是指它要调用外面的unsigned int a和void delary (),还是模块自己内部的unsigned int a和void delary ()被别的模块调用?

国芯人工智能 发表于 2025-6-3 10:53:00

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

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-6-3 10:53:00

在C/C++语言中,extern 用于声明外部函数或变量的访问权限,而不是指函数或变量是否在模块内部或外部调用。以下是关于extern的详细说明:

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

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

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

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

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

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]

ercircle 发表于 2025-6-3 11:07:49

extern 只是声明,具体定义可以在本文件,也可以在别的文件。
总之extern 可以出现在多个文件中,定义只定义一遍就行了。

建议买本C或C++ Primer Plus看看

神农鼎 发表于 2025-6-3 13:46:25







页: [1]
查看完整版本: 外部声明extern傻傻分不清