Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ sigaction同时包含结构和函数_C++_Linux_Signals - Fatal编程技术网

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,它也起了作用,谢谢你这么好的解释