Tag: 内部

为什么结构定义有内部联系?

(我在谈论C,但它也适用于C ++中的类模板) 在头文件中,放置所有DECLARATIONS而不是定义是自定义的。 但是,我们通常将结构定义或类模板放在头文件中,而实际上并不知道为什么我们可以。 这并没有多大意义,因为它们也是定义 – 一个定义规则。 (是的,结构定义和类模板不会导致设置任何存储,但是仍然会出现“重新定义”错误,这意味着它们是定义)。 EX)在同一文件中定义具有相同标记的多个结构会给出重新定义错误,但在多个源文件中定义具有相同标记的多个结构不会导致任何错误(类同样发生)。 唯一有意义的是结构定义和类模板具有内部链接(与默认外部链接相对),但我在K&R或参考手册中找不到任何关于它的引用。 实际上,连接中甚至没有提到结构。 我想知道ANSI标准指出这种现象的确切参考。 (国际海事组织,这是一个非常模棱两可的问题,在ANSI标准的某处提到)。 编辑我不是问为什么结构定义可以放入头文件。 我问为什么在头文件中放置结构定义不会像我们在头文件中放入变量定义时那样导致重定义错误(并将其包含在多个源文件中) EX)test1.c:int a = 3; test2.c:int a = 4; 由于重新定义导致编译错误。 然而, test1.c:struct test {int a}; test2.c:struct test {int b}; 不会导致编译错误,我能想出的唯一原因是结构定义要么具有内部链接,要么根本没有链接。

在“C”头文件中声明的静态函数

对我来说,在源文件中定义和声明静态函数是一个规则,我的意思是.c文件。 然而,在极少数情况下,我看到人们在头文件中声明它。 由于静态函数具有内部链接,我们需要在包含声明函数的头文件的每个文件中定义它。 这看起来很奇怪,远非我们通常在将某些东西声明为静态时所需要的。 另一方面,如果有人天真地尝试使用该function而没有定义它,编译器将会投诉。 所以从某种意义上来说,即使听起来很奇怪也不是真的不安全。 我的问题是: 在头文件中声明静态函数有什么问题? 有什么风险? 编译时间有什么影响? 运行时有任何风险吗?

scanf()如何在操作系统内部工作?

我一直在想如何scanf()/ printf()实际上在硬件和操作系统级别上工作。 数据在哪里流动以及操作系统在这些时间到底做了什么? 操作系统会调用什么? 等等…

如何获取结构中的位数组?

我正在思考(因此我正在寻找一种方法来学习这个, 而不是一个更好的解决方案 ),如果有可能在结构中获得一个位数组。 让我举一个例子来certificate。 想象一下这样的代码: #include struct A { unsigned int bit0:1; unsigned int bit1:1; unsigned int bit2:1; unsigned int bit3:1; }; int main() { struct A a = {1, 0, 1, 1}; printf(“%u\n”, a.bit0); printf(“%u\n”, a.bit1); printf(“%u\n”, a.bit2); printf(“%u\n”, a.bit3); return 0; } 在此代码中,我们在结构中包含4个单独的位。 可以单独访问它们,将位操作的工作留给编译器。 我想知道的是,如果这样的事情是可能的: #include typedef unsigned int bit:1; struct B { […]