C - 想要将 struct 类型的函数放在单独的 .c 文件中

C - Want to put functions of type struct in separate .c-file

所以我有这个代码和一个结构和一堆函数,我想把这些函数(至少)放在一个单独的 .c 文件中。但是,当我这样做时,它不再识别我拥有的结构卡类型。我该怎么办?

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

struct card {
    int suit;
    int value;
};

const char *suitName( int suitNum)
{
    switch (suitNum) {
    case 1: return "spades";
    case 2: return "clubs";
    case 3: return "hearts";
    case 4: return "diamonds";
    }

    return "(invalid suit)";
}

struct card makeCard(int suit, int value) {

    struct card tempCard;
    tempCard.suit = suit;
    tempCard.value = value;

    return tempCard;
}

struct card *createDeck()
{
    const size_t  count = 52;
    struct card *deck;


    /* Allocate new deck of 'count' cards. */
    deck = malloc(count * sizeof deck[0]);
    if (!deck) {
        fprintf(stderr, "createDeck(): Out of memory!\n");
        exit(EXIT_FAILURE);
    }
    int i = 0;
    struct card *deckArrayPtr = deck;
    for (int suit = 1; suit < 5; suit++)
    {
        {
            for (int value = 1; value < 14; value++) {
                deck[i] = makeCard(suit, value);
                i++;
            }
        }
    }
    return deck;
}

void shuffleDeck(struct card *deck) {
    int cardSwitch1, cardSwitch2;
    struct card temp;
    cardSwitch1 = (rand() % 52);
    cardSwitch2 = (rand() % 52);
    temp = deck[cardSwitch1];
    deck[cardSwitch1] = deck[cardSwitch2];
    deck[cardSwitch2] = temp;
}


int main()
{
    srand((unsigned int)time(NULL)); //initializing srand

    struct card *deckAr = createDeck(); //creating the struct card deck array

    for (int i = 0; i < 5000; i++)
    {
        shuffleDeck(deckAr);
    }
    for (int a = 0; a < 52; a++) {
        //printf("%d of %s\n", deckAr[a].value, suitName(deckAr[a].suit));
        printf("%d of %s\n", deckAr[a].value, suitName(deckAr[a].suit));
    }
    return 0;
}

编写声明类型和函数原型的头文件

mytypes.h

struct card {
    int suit;
    int value;
};

const char *suitName( int suitNum);
struct card makeCard(int suit, int value);
...

写一个 .c 文件来实现你的函数(包括你的头文件)

myfunc.c

#include "mytypes.h"

const char *suitName( int suitNum)
{
    ...
}
...

你的主程序的文件终于出来了

main.c

#include "mytypes.h"

int main()
{
    ...
}