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()
{
...
}
所以我有这个代码和一个结构和一堆函数,我想把这些函数(至少)放在一个单独的 .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()
{
...
}