C++ sigaction同时包含结构和函数
编译以下代码:C++ sigaction同时包含结构和函数,c++,linux,signals,C++,Linux,Signals,编译以下代码: struct sigaction sa; memset (&sa, 0, sizeof (sa)); sa.sa_handler = &handler; sigaction (SIGRTMIN + 5, &sa, NULL); 但是如果我省略了struct,它会给我错误: 期望“;”在“sa”之前 我使用C++,其中使用结构> 关键字不是必需的。 当我在C中使用struct时,它是如何工作的呢?结构标记位于不同的名称空间中 名字,所以他们不会冲突。在C+
struct sigaction sa;
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &handler;
sigaction (SIGRTMIN + 5, &sa, NULL);
但是如果我省略了struct
,它会给我错误:
期望“;”在“sa”之前
我使用C++,其中使用<代码>结构> <代码>关键字不是必需的。
当我在C中使用
struct
时,它是如何工作的呢?结构标记位于不同的名称空间中
名字,所以他们不会冲突。在C++中,有一个特殊的
hack在语言上支持这一点:除了通常的
函数重载时,可以在
相同的作用域,提供一个指定类类型的类型名称
或枚举。查找名称时,编译器将
选择一个不是类型名称的名称,除非
紧跟在类键之后(class
、struct
或union
)
或者关键字
enum
这看起来像是您实际上同时声明了一个struct sigaction
和一个函数sigaction
。在本例中,除非您告诉编译器,否则编译器无法知道您指的是第一行中的struct
。因此,编译器无法猜测您是否使用sigaction
表示类型或函数,您必须告诉它。这也是在模板中的依赖类型之前使用typename
的原因。我尝试了int,它也起了作用,谢谢你这么好的解释