是否可以声明仅在使用该结构的.c文件中可见的结构类型?我知道通过在外部数据对象前放置静态,可以将变量的链接更改为内部.但是可以将静态放在新结构类型的声明前面,如下所示吗?
static struct log{
...;
...;
};
typedef struct log log;
Run Code Online (Sandbox Code Playgroud)
如果不能将结构类型(例如上面的log)设置为"私有",是否意味着即使其他源文件不知道结构的名称(在我的示例中是登录)的存在,如果他们将一些变量命名为log(假设我将链接所有目标文件),仍然会发生意外名称冲突?
编辑:我不熟悉编译器/链接器的工作原理.如果存在全局变量名称日志,并且包含全局变量的文件链接到定义结构日志的唯一源文件,则链接时不会引起任何混淆,一个日志是变量名称而另一个日志是一个类型名称?
struct不可以.制作私有的唯一方法是仅在使用它的文件中提供其定义 - 不要将其放在公共头文件中.如果它仅在一个源文件中使用,那么只需在该源文件中定义它,但如果它在多个源文件中使用,则会遇到一个棘手的问题:您可以在每个源文件中定义它,但是由于您有记得在进行任何更改时更改它的每个实例; 或者,您可以在私有头文件中定义它,并确保只有那些源文件包含私有头.
不同源文件中的名称冲突是可以的,只要它们不尝试以任何方式相互连接即可.如果struct log在一个文件中定义了一个文件,并在另一个文件中定义了不同的定义struct log,则不log要将一个文件传递给另一个文件.在C中,结构名称不会成为目标文件中任何符号名称的一部分 - 特别是,没有名称可以包含参数类型的函数名称(如C++那样),因为函数重载在C语言中是非法的.
| 归档时间: |
|
| 查看次数: |
5299 次 |
| 最近记录: |