use*_*875 8 c c++ struct typedef
我目前正在使用C++ IDE来处理需要在C上工作的东西,并希望确保稍后我不会遇到问题.在制作下面的结构后:
typedef struct test {
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
然后我使用test my_test;诸如此类的东西创建它的实例
my_test.a = 5......这在我的VStudio C++中工作正常.这会在gcc以后发挥作用吗?
我读了相关的问题(我看到我不是第一个有这种问题的人),但似乎没有人像我这样做.
事实上,typedef struct {//stuff} test;和我的版本有什么区别?
Ben*_*ley 19
typedef struct THIS_IS_A_TAG
{
int a;
int b;
} THIS_IS_A_TYPEDEF;
THIS_IS_A_TYPEDEF object1; // declare an object. C:Ok, C++:Ok
struct THIS_IS_A_TAG object2; // declare another object. C:Ok, C++:Ok
THIS_IS_A_TAG object3; // declare another object. C:Not Ok, C++:Ok
Run Code Online (Sandbox Code Playgroud)
typedef的原因是因为C程序员希望能够做到第三件事,但他们不能.
Mic*_*yan 18
和...之间的不同:
struct Name {};
Run Code Online (Sandbox Code Playgroud)
和
typedef struct Name {} Name;
Run Code Online (Sandbox Code Playgroud)
是的,在C中,你需要使用:
struct Name instance_name;
Run Code Online (Sandbox Code Playgroud)
对于前者,对于后者,您可以:
Name instance_name;
Run Code Online (Sandbox Code Playgroud)
在C++中,struct在任何一种情况下都没有必要重复关键字.请注意,您创建没有名称(即typedef struct Name{};)的typedef的示例是非标准AFAIK(如果使用关键字typedef,则需要提供一个别名以键入该名称).
至于最后的变化:
typedef struct { /* ... */ } Name;
Run Code Online (Sandbox Code Playgroud)
上面的代码创建了一个名为struct的未命名结构.您可以像使用这样的方式使用这样的结构typedef struct Name { /* ... */ } Name;,但是编译器通常会发出结构的名称(而不是别名),因此如果您为其命名并且typedef为as,则可能会获得更好的涉及结构的错误消息.反对typedef一个匿名结构.
在C和C++中,示例构造都是毫无意义的:
typedef struct test {
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
在C中,这表示存在一个struct test以两个整数作为内容的类型.如果在close括号' }'和分号' ;' 之间有一个名字,那么你可以从关键字中获得一些好处typedef; 就目前而言,关键字typedef是多余的,并且(如果设置得足够繁琐),GCC会警告你.
在C++中,这表示存在一种类型struct test; 此外,在C++中,它也创建了一个类型test(在C中不会发生).关键字typedef仍然可以省略,并且将实现相同的结果.
语法合法; 它没用,就是这样.typedef可以省略关键字而不用稍微改变程序的含义.
你可以做:
typedef struct test {
int a;
int b;
} test;
Run Code Online (Sandbox Code Playgroud)
现在,在C和C++中,您都有一个类型struct test和一个别名test.