(C / C ++)struct初始化语法

时间:2012-01-12 02:25:49

标签: c++ c syntax struct initialization

当我制作自己的结构时,请说:

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

我可以像这样初始化myStruct类型的实例:

myStruct instance1;

所以我的问题是,为什么我经常在结构初始化期间看到“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;
}

&GT;     第13行:struct stat fileStatus;

这是出于某种原因在C中完成的事情吗? 有宏或typedef的东西吗?
我只是不明白为什么会这样。

2 个答案:

答案 0 :(得分:6)

这是一件C事;在C ++中没有充分的理由继续这样做。 1

在C中,struct是typename的一部分,例如:

struct foo { int x; };

定义了一个名为struct foo的类型。在C ++中,它定义了一个名为foo的类型。在C中,你通常可以在typedef后隐藏这种烦恼:

typedef struct foo { int x; } foo;

<小时/> 1 至少,在代码中不能编译为C(例如你问题中的例子)。

答案 1 :(得分:-3)

您可以按照以下方式执行操作:

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

因此,只要你创建一个mystruct项,它就会创建一个指向你的struct的指针,否则你必须通过

来调用你的struct。

struct mystruct * object;