现在我在这里学习存储类。他似乎对自动存储类和寄存器存储类解释了同样的事情。他两者之间唯一的区别是寄存器存储类存储在CPU寄存器中。这些存储类之间有什么区别吗?寄存器存储类有什么用途吗?在某些 C 编译器上,Register 关键字是默认的吗?
register int x = 5;
auto int y = 3;
Run Code Online (Sandbox Code Playgroud) 寄存器和易失性有什么区别?什么时候使用哪一个?易失性寄存器变量的含义是什么?
register int a;
volatile int a;
当尝试从头文件中的结构中通过'typedef'声明别名时出现此错误:
错误:“ typedef”之前的预期specifier-qualifier-list
我最初的目的是测试typedef的范围是否包含在结构中。这样可以避免如果此标头要包含在另一个源文件中,则可以避免不必要地使用此别名。如果我将违规行(以'typedef'开头的行)移到结构外部并在其之前,则将编译代码。
但是,我不明白为什么不能在结构中调用typedef以及为什么会收到上述错误。
此外,我不确定这种做法是否确实必要。限制别名(如果有)的优点是什么?
#ifndef STUDENT_H
#define STUDENT_H
typedef struct{
typedef char* string;
string name;
int id;
} Student;
#endif
Run Code Online (Sandbox Code Playgroud)
我希望代码可以编译,但是却收到错误消息:
错误:“ typedef”之前的预期specifier-qualifier-list
#include <iostream>
class A{
public:
void printit(register int b) {
std::cout<<"inside A";
}
};
class C:public A{
public:
void printit(int b) {
std::cout<<"inside C";
}
};
int main() {
C c;
c.printit(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,printit 是 C 中的一个重写方法,没有存储类寄存器。但是,编译器仍然匹配,并且代码打印“inside C”。为什么寄存器 int 与 int 匹配?
auto、register、static 和extern 在C 中被称为存储类。但是为什么在C 中没有类的情况下将它们称为类呢?