有关C语言中的struct名称空间的一些问题

时间:2018-11-23 14:16:02

标签: c struct

我正试图了解this answer - typedef struct vs struct definitions [duplicate]

  

(第3行): [“]在第一行中,您要在结构名称空间中定义标识符S(并非C ++意义上的) 。[。“]

  1. 对于struct X {...};来说,{...}就像X的形容词,而X {...}被扔到称为struct-namespace的东西中,有多少struct-namespace程序中有吗? struct仅指定一个吗?
  2. 似乎在C / C ++中struct和class是almost the same?,所以在C ++中struct和class都在class-namespace中?

2 个答案:

答案 0 :(得分:1)

C99 standard draft

6.2.3

  

6.2.3标识符的命名空间

     

如果在翻译单元中的任何位置都可以看到一个以上的特定标识符声明,则语法上下文会消除指向不同实体的用法的歧义。因此,有单独的命名空间   各种类别的标识符,如下所示:

     

-标签名称   (通过标签声明和使用的语法消除了歧义);

     

-   标签   结构,联合和枚举(通过跟随任何   的关键字   结构   ,   联盟   ,要么   枚举   );

     

-   成员   结构或联合体的;每个结构或联合都有单独的名称   为其成员分配的空间(通过用于访问   通过   。   要么   ->   运算符);

     

-所有其他标识符,称为   普通标识符   (在普通声明符中声明为   枚举常量)。

换句话说,如果您有<html> <head> <title> User Login</title> <link rel="stylesheet" type="text/css" href="mainbody.css"> <link rel="stylesheet" type="text/css" href="loginheader.css"> <link rel="stylesheet" type="text/css" href="signinsignup.css"> <link rel="icon" href="../img/Polar_Bear-512.png"> </head> <body> <div class="loginheadercontain"> <a href="../Index.php"><div class="dotcontain backtohomepage"> <img src="047_-_homepage-512.png"> </div></a> <div class="backtohomepage"> <a href="../Index.php">Homepage</a> </div> </div> </div> <div class="login-wrap"> <div class="login-html"> <div class="containerlogin"> <div class="avatarcontainer avatar"> <img src="avatar.jpg"> </div> </div> <div> <input id="tab-1" type="radio" name="tab" class="sign-in" checked> <label for="tab-1" class="tab">Sign In</label> <input id="tab-2" type="radio" name="tab" class="sign-up"> <label for="tab-2" class="tab">Sign Up</label> <div class="login-form"> <div class="sign-in-htm"> <form action="validation.php" method="post"> <div class="group"> <label for="user" class="label">Username</label> <input id="user" type="text" name="user" class="input" placeholder="Enter Your Name" required> </div> <div class="group"> <label for="pass" class="label">Password</label> <input id="pass" name="password" type="password" class="input" data-type="password" placeholder="Enter Your Password" required> </div> <div class="group"> <input type="submit" class="button" value="Sign In"> </div> <div class="hr"></div> <div class="foot-lnk"> <label for="tab-2">Let's join our community!</a> </div> </form> </div> <div class="sign-up-htm"> <form action="registration.php" method="post"> <div class="group"> <label for="user" class="label">Username</label> <input id="user" type="text" name="user" class="input" placeholder="Enter Your Name" required> </div> <div class="group"> <label for="user" class="label">Password</label> <input id="pass" name="password" type="password" class="input" data-type="password" placeholder="Enter Your Password"required> </div> <div class="group"> <label for="user" class="label">Phone number</label> <input type="tel" name="phone" class="input"placeholder="Enter Your Phone Number"> </div> <div class="group"> <label for="user" class="label">Email</label> <input type="email" name="mail" class="input" placeholder="Enter Your Email"> </div> <div class="group"> <input type="submit" class="button" value="Sign Up"> </div> <div class="hr"></div> <div class="foot-lnk"> <label for="tab-1">Already Member?</a> </div> </form> </div> </div> </div> </body> </html> ,则struct S在struct名称空间中,而如果您也有S,则它在普通标识符的名称空间中。 / p>

C ++并非如此

答案 1 :(得分:0)

1(对于C):所有结构标签都有一个命名空间。即使您在其他名称空间中使用了相同的名称,也可以根据需要设置任意数量的不同标签。

每个结构本身就是它自己的名称空间(有“无限”的结构名称空间)。

// You can have
struct foo { int var; }
struct bar { double var; }
struct baz { int var; }
struct qux { int var; }
// with no conflict between all the `var`