(C / C ++) синтаксис инициализации структуры - PullRequest
1 голос
/ 12 января 2012

Когда я создаю свою собственную структуру, говорю:

struct myStruct{
    int data1;
    int data2;
    string data3;
}

Я могу инициализировать экземпляр типа myStruct следующим образом:

myStruct instance1;

Так что мой вопрос: почемучасто ли я вижу "struct", написанную во время инициализации struct? Может быть, это неточное утверждение, поэтому вот пример того, что я имею в виду:

/*This is a tiny program that checks
  to see if a file exists in
  the current working directory. */

#include <sys/stat.h>
#include <iostream>
using namespace std;

const string FILENAME = data.txt;

int main(){

    struct stat fileStatus; //<-- HERE HERE HERE!
    if (FileExists(FILENAME, fileStatus)){
        cout << "File Does Exist" << endl;
    }else{
        cout << "File Does NOT Exist" << endl;
    }

    return 0;
}

bool FileExists(const string & fileName,struct stat & fileStatus){

    bool fileDoesNotExist = stat (fileName.c_str(), &fileStatus);
    return !fileDoesNotExist;
}

> LINE 13: struct stat fileStatus;

Это что-то, что было сделано в C по какой-то причине?
Что-то с макросом или typedef?

Я просто не понимаю, почему это такесть.

Ответы [ 2 ]

6 голосов
/ 12 января 2012

Это вещь C;нет веских оснований продолжать делать это в C ++. 1

В C struct является частью typename, например:

struct foo { int x; };

определяеттип называется struct foo.В C ++ он определяет тип с именем foo.В C вы обычно можете скрыть это раздражение за typedef:

typedef struct foo { int x; } foo;


1 По крайней мере, в коде, который не может быть скомпилирован как C (как пример в вашем вопросе).
0 голосов
/ 12 января 2012

Вы можете делать то, что хотите, вместо этого называя это так:

typedef struct mystruct
{
    int itema;
    int itemb;
Etc...
}* mystruct;

Так что всякий раз, когда вы создаете элемент mystruct, он создает указатель на вашу структуру, иначе вы должны вызывать свою структуру с помощью

struct mystruct * object;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...