c - 如何在 C 项目中组织/简化文件 main.c

标签 c function file

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

3年前关闭。




Improve this question




我有一个名为“过程编程”的大学类(class)的作业,我需要用 C 语言实现/编写一个纸牌游戏。

这是我的第一个中型项目(至少与我以前编写的(非常简单的程序)相比它是中等的),所以我对如何使我的代码更简单、更容易阅读/理解有些疑问。

我应该将所有内容都写在同一个 .c 文件中吗?但在我看来,如果所有代码都写在这个独特的 .c 文件中,那么很难“浏览”所有代码,所以我想到了下一个。

使用我的主 .c 文件来调用其他函数,这些函数将被声明/存储在头文件中。例如:

//main .c file

        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        #include <windows.h> 

        #include "display.h" 

        void main()
        {
            /*this is just something I'm going to use to make the 
             main menu a litte more stylistic*/
            gotoxy(60, 10);
            asteriscos(50);
        }


//Header "display.h".

    void gotoxy(int x, int y)
    {
        printf("%c[%d;%df", 0x1B, y, x);
    }

    void asteriscos(int numero_de_asteriscos)
    {
        int i;

        for (i = 0; i < numero_de_asteriscos; i++)
        {
            Sleep(40); 
            printf("*");
        }
    }

重点只是在主 .c 文件上创建游戏的主菜单,但对于每个选项(1. 玩游戏;2. 游戏描述;3. 从保存的游戏开始;4. 退出。 ) 它将调用在头文件中声明的函数。并且在该函数内部将调用更多存储在 .h 文件中的函数,例如:如果用户按下 1(玩游戏),它将调用一个函数,该函数将询问玩家人数,在 .h 文件中声明和定义。 h 文件。然后,在同一个函数中,在用户输入玩家数量之后,它会被调用另一个函数来创建牌组并给每个玩家 7 张牌,这个函数也将在同一个 .h 中声明和定义文件。这意味着,在主菜单之后,一切都将在 .h 文件中完成。

因此,最后我的主 .c 文件看起来像这样(仅在此处显示为示例):
//main .c file
void main()
{
    int option;

    printf("\n1 - Play the Game");
    printf("\n2 - Descripiton of the Game");
    printf("\n3 - Start from a saved Game");
    printf("\n4 - Exit.")
    scanf("%d", &option);

    switch (option)
    {
        case 1 :
        {
            some1_function_stored_header();
            break;
        }
        case 2:
        {
            some2_function_stored_header();
            break;
        }
        case 3:
        {
            some3_function_stored_header();
            break;
        }
        case 4:
        {
            some3_function_stored_header();
            break;
        }
    }
}

不同选项的所有工作都将在 .h 文件中完成。我将拥有一个更清晰、更短的主 .c 文件,而且我更容易查找代码的特定部分,因为它都将被分成多个部分(.h 文件)。但是后来我读到这不是一个好习惯,因为我们应该只将函数原型(prototype)存储在 .h 文件中,而将定义存储在一个源文件中。

那么最好的做法是什么?仅将函数的原型(prototype)存储在 .h 文件中并在我的 main .c 中声明所有函数?但后来我会得到一个非常大的(就行而言).c 文件,因为我需要构建这个游戏的许多功能。我应该做什么以及如何使代码易于阅读/理解?

亲切的问候

最佳答案

Should I write everything in the same .c file? But in my opinion it would be pretty hard to "navigate" throught all the code if it was all written in this unique .c file, so I thought of doing the next.



这是一个见仁见智的问题。 有些人在一个包含几十万个源代码的 C 文件中拥有程序。其他人更喜欢将这样的程序拆分为几十个较小的文件,每个文件的长度不到一千行。

当然,编译时间取决于源文件的大小。 (FWIW,分布式 sqlite 有一个巨大的 C 文件,是其他几个文件的集合)。

但是,一般建议是保持每个函数的大小合理。有些人建议使用几十行的短函数。其他人可以接受,在某些情况下(当函数按顺序执行简单的事情时)几百行的函数。

你正在学习 C. 我个人的建议是将你的程序分成几百行(或者一千行)的源文件,每个函数不超过 50 或 60 行 (通常更小)。当然,您需要选择并学习如何使用您的 C 编译器(如果使用 GCC,请务必阅读其 Invoking GCC 章节)。你需要写一个 header file声明所有全局类型、函数和变量。您需要学习如何使用 build automation工具,例如 makeninja .

看看目前的做法。 研究一些小free software的源码用 C 写的 (一个小程序是任何小于十万行源代码的东西)。你会在 github 上找到很多, gitlab ,或在 Linux 发行版中。

您可能想使用一些现有的 library (例如 ncursesGTKlibSDL )。您会发现在 Linux 上编写 C 程序比在 Windows 上更容易。

关于c - 如何在 C 项目中组织/简化文件 main.c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242067/

相关文章:

c - 在C中使用winsock2.h,但出现以下错误是什么意思?

c - "++"运算符在 "char *"上做了什么?

c++ - 使用模板化元数存储在类函数中

java - 如何使用java在Linux服务器上创建文件

java - 如何在 Servlet 程序中获取正确的文件路径?

c - 使用 C 在终端中打印多字节字符

c - 如何交叉检查 C 中的数据类型?

swift - Swift 中没有带有标识符错误的 Segue?

function - Azure 函数 "Host keys"不是使用 Terraform 创建的

php - 名称中的空格会破坏下载吗?