Structure tag and name, why does a local variable declared as name compile?

In some code I saw recently there was a structure defined like this:

typedef struct tagMyStruct {
    int numberOne;
    int numberTwo;
} MYSTRUCT;

The way I understand this, tagMyStruct is the new data type and MYSTRUCT is a variable that is created right there.

At another place, this was used like this:

MYSTRUCT *pStruct = new MYSTRUCT;

and it compiled fine with Visual Studio 2010. How is that valid C++? I thought MYSTRUCT was a variable and not a type?

Answers


No. tagMyStruct is the name of the struct. In C, unlike C++, you must explicitly use the struct keyword every time you use the struct type. For example

tagMyStruct x; //error
struct tagMyStruct x; //OK

To avoid writing struct all the time, struct tagMyStruct is typedef'd to MYSTRUCT. Now you can write

MYSTRUCT x; //ok, same as struct tagMyStruct x;

What you thought this was (a variable definition) would be without the typedef keyword, like this

struct tagMyStruct {
    int numberOne;
    int numberTwo;
} MYSTRUCT;

BTW

MYSTRUCT pStruct = new MYSTRUCT; //error cannot convert MYSTRUCT* to MYSTRUCT

is not valid C or C++ anyway. Maybe you mean

MYSTRUCT* pStruct = new MYSTRUCT; //valid C++ (invalid C - use malloc instead of new in C)

hth


Need Your Help

Search stored procedure returns cut off column data

sql sql-server xml stored-procedures

I have a stored procedure that searches all the tables in the database and returns the table that has the searched value.

How to send email from PHP code

php email

I need to send mail from PHP code, I am using XAMPP (windows) for PHP. I use mail() like this:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.