相关疑难解决方法(0)

在Unix内核中找到的C中的匿名结构

我已经开始在Unix v6上阅读狮子会评论.我偶然发现了这些片段,这些片段在C语言中从未见过.作者确实提供了某种解释,但有人可以向我解释这里发生了什么吗?

params.h :

SW 0177570
...... 
struct { int integ; };
Run Code Online (Sandbox Code Playgroud)

这用于 unix/prf.c

if(SW->integ == 0)
Run Code Online (Sandbox Code Playgroud)

作者的解释

SW之前定义为值0177570.这是只读处理器寄存器的内核地址,用于存储控制台交换机寄存器的设置.声明的含义很明确:获取位置0177570的内容并查看它们是否为零.问题是用C表达.代码if (SW == 0)不会传达这个含义.显然 SW是一个应该被解除引用的指针值.编译器可能已被更改为接受, if (SW-> == 0) 但就目前而言,这在语法上是不正确的.通过发明具有元素的虚拟结构,integ程序员已经找到了解决他的问题的令人满意的解决方案.

我的问题主要是这是如何工作的?当编译器看到时SW->integ,它如何SW与匿名结构相关联?

c unix structure

9
推荐指数
1
解决办法
589
查看次数

是一个结构{...}; 一个类型或一个未命名的变量?

在文件范围,以下是类型声明还是未命名变量?

struct student_s {
    char* name;
    int age;
    double height;
    struct student_s* next;   
};
Run Code Online (Sandbox Code Playgroud)

如果是类型定义,那么有什么区别:

typedef struct student_s {
    char* name;
    int age;
    double height;
    struct student_s* next;   
};
Run Code Online (Sandbox Code Playgroud)

(背景:请参阅我的答案将变量从全局变为本地 - C,我相信第一个引入了一个未命名的变量,然后由编译器对其进行优化.)

注意:该问题已被标记为可能重复的结构成员标识符放在什么范围内?但我相信我并不是在询问有关成员范围的问题,而是对申报实际创造的内容提出疑问.然而.回答C++中'struct'和'typedef struct'的区别?解释我的问题.

c struct

6
推荐指数
1
解决办法
1439
查看次数

标签 统计

c ×2

struct ×1

structure ×1

unix ×1