如何创建包含struct的文件

时间:2015-12-24 15:31:57

标签: c

我想要控制类,结构或新文件。但是当我创造它时。我无法运行我的程序。这是我的计划: main档案:

#include <stdio.h>
#include <stdlib.h>
#include "testing.h"

    int main(int argc, char** argv) {
        struct test var;
        var.a = 2;
        return (EXIT_SUCCESS);
    }

文件头结构:

#ifndef TESTING_H
#define TESTING_H

     struct test x;

#endif /* TESTING_H *

最后是文件define struct:

typedef struct test {
    int a;
};

我在创建新文件方面没有太多经验。可能是我的问题是愚蠢的。希望大家帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

你的问题&#34; 我在猜测&#34;是结构定义

typedef struct test {
    int a;
};

这不仅仅是一个结构定义,而是一个类型定义,它缺少类型名称,它可以像这样修复

typedef struct test {
    int a;
} MyTestStruct;

或只是移除typedef,只需使用struct test来声明其实例。

此外,如果您打算访问它的成员,那么您必须在同一个编译单元中提供一个定义,您可以在其中访问它的成员,在本例中为&#34; main &#34;你调用它的文件。

如果您想隐藏成员(使其成为不透明的结构),请尝试这样

<强> struct.h

#ifndef __STRUCT_H__
#define __STRUCT_H__
struct test; // Forward declaration

struct test *struct_test_new();
int struct_test_get_a(const struct test *const test);
void struct_test_set_a(struct test *test, int value);
void struct_test_destroy(struct test *test);

#endif /* __STRUCT_H__ */

然后你会有

<强> struct.c

#include "struct.h"

// Define the structure now
struct test {
    int a;
};

struct test *
struct_test_new()
{
    struct test *test;
    test = malloc(sizeof(*test));
    if (test == NULL)
        return NULL;
    test->a = DEFAULT_A_VALUE;
    return test;
}

int 
struct_test_get_a(const struct test *const test)
{
    return test->a;
}

void 
struct_test_set_a(struct test *test, int value)
{
    test->a = value;
}

void 
struct_test_destroy(struct test *test)
{
    if (test == NULL)
        return; 
    // Free all freeable members of `test'
    free(test);
}

这种技术实际上非常优雅并且具有许多优点,最重要的是你可以确保结构被正确使用,因为没有人可以直接设置值,因此没有人可以设置无效/不正确的值。而且,如果使用malloc()动态分配其中某些成员,则可以确保在用户在指针上调用_destroy()时释放它们。您可以控制您认为合适的值范围,并在适用的情况下避免缓冲区溢出。