C 从主程序中拆分多个函数

C 从主程序中拆分多个函数,c,C,这是我在网上找到的密码 /*program to add and subtract elements of two arrays.*/ #include<stdio.h> #define MAX 20 /* function : readArray() to read array elements. */ void readArray(int a[],int size) { int i; for(i=0;i< size;i+

这是我在网上找到的密码

/*program to add and subtract elements of two arrays.*/

#include<stdio.h>
#define MAX 20 

/*  function    :   readArray() 
to read array elements. 
*/

 void    readArray(int a[],int size) 
{ 
    int i; 
    for(i=0;i< size;i++) 
    { 
        printf("Enter %d element :",i+1); 
        scanf("%d",&a[i]); 
    } 
} 

/*  function    : printArray() 
to print array elements. 
*/
void printArray(int a[],int size) 
{ 
    int i; 
    for(i=0;i < size; i++) 
        printf("%5d",a[i]); 
} 

/*  function    : addArray(), 
to add elements of two arrays. 
*/
void addArray(int a[],int b[],int c[],int size) 
{ 
    int i; 
    for(i=0; i< size;i++) 
        c[i]=a[i]+b[i]; 
} 

/*  function    : subArray(), 
to subtract elements of two arrays. 
*/
void subArray(int a[],int b[],int c[],int size) 
{ 
    int i; 
    for(i=0; i< size;i++) 
            c[i]=a[i]-b[i]; 
} 

int main() 
{ 
    int A[MAX],B[MAX],ADD[MAX],SUB[MAX]; 
    int i,n; 


    printf("\nEnter size of an Array :"); 
    scanf("%d",&n); 

    printf("\nEnter elements of Array 1:\n"); 
    readArray(A,n); 
    printf("\nEnter elements of Array 2:\n"); 
    readArray(B,n); 

    /* add Arrays*/
    addArray(A,B,ADD,n); 
    /* subtract two Arrays*/
    subArray(A,B,SUB,n); 

    printf("\nArray elements after adding :\n"); 
    printArray(ADD,n); 

    printf("\nArray elements after subtracting :\n"); 
    printArray(SUB,n); 

    printf("\n\n"); 
    return 0; 
} 
我不知道这是对还是错


编辑:已解决。。。因为它是一个多用途文件,所以您应该始终返回

您应该在头文件的其他文件中编写要使用的函数原型

例如:

/* "include guard": prevent problems which come from this file included multiple times */
#ifndef ARRAY_UTIL_H_GUARD_0F1BCF9D_9429_4D9B_A05A_07BE3D527F84
#define ARRAY_UTIL_H_GUARD_0F1BCF9D_9429_4D9B_A05A_07BE3D527F84

/* declarations of your functions */
void readArray(int a[],int size);
void printArray(int a[],int size);
void addArray(int a[],int b[],int c[],int size);
void subArray(int a[],int b[],int c[],int size);

/* end of "include guard" */
#endif

我在MikeCAT的回答中添加了一些信息,这是完全正确的,但是由于您是C语言的新手,您可能需要更多的解释

通过他的“include-guard”,Mike演示了如何防止包含文件被多次包含。例如,当.c文件包含.h文件(
#include“myfile.h”
)并且.h文件也包含它(例如,收集所有包含内容的包含文件)时,可能会出现这种情况

在这种情况下,它不会造成伤害,但在其他情况下,它会造成伤害,必须防止多重包容。只有在(尚未)定义符号的情况下,
#ifdef
块才会包含在编译中

要告诉其他编译单元(c文件)模块(
myfile.c
)提供了哪些类型、函数和变量,现在可以指定它们。函数是函数名、返回类型和参数的列表,每个函数都以分号结尾,如Mike的示例所示

变量在前面声明关键字
extern
,例如

extern int a_size;
这会告诉编译器变量存在,但不在此编译单元中。链接器稍后将解析变量或报告它丢失

类型按原样声明,没有特殊关键字,例如游戏板:

typedef struct MY_BOARD {
    int n_pieces;
    int board[8][8];
} t_board;
类型通常首先声明,因此您可以声明它的(外部)变量。之前的类型是常量,但您已经知道了

Mike结束时关闭了他的多重包含保护的conditionla编译块


您现在已经编写了一个好的.h文件。

这就是我的.h文件,分离的函数将转到.c?好的做法是保持头文件名和.c文件名相同。例如,让我们将标题命名为“array_util.h”。然后,您的.c文件应命名为“array_util.c”。编译器实际上并不需要这样做,但是任何阅读您的代码的人都会非常感激。你分离的函数将进入.c文件。我明白了。。。所以我按照你的建议把它贴在上面了。很抱歉,我在这里遇到了麻烦,我也读过这篇文章,但从他们的解释来看,我真的不明白它是如何工作的……第一步是创建头文件。下一步是创建一个.c文件,其中包含要从主.c文件移出的函数。导入头文件时,头文件为main的.c文件提供函数原型。最后,使用函数创建的.c文件在编译时提供了实际的函数。ok。。那么我在头文件中放了什么呢?它是否像void readArray(int a[],int size);???下面的答案对进入头文件的内容有很好的建议。它演示了如何使用#定义的保护来防止编译器对任何给定编译单元多次读取头文件。一个简单的例子可能不需要它,但在任何相当大的代码库中,它都是需要的。。。但是我如何调用我的头文件以供主文件使用呢。。。它澄清了我的一些问题。。。我已经在上面发布了我第一次尝试做头文件。你能不能检查一下,除了我不知道该放什么的那张外,我还遗漏了什么。对不起,这是我的错trouble@micovillena您忘了在函数原型声明后添加分号。是的。。。我甚至忘了调用函数。。。你现在可以看一下吗?@MikeCAT你现在可以看一下。。。但是我保留了函数_main中引用的_printary和_readArray未解析的外部符号这是什么意思?@micovillena您是否正确链接了所需的文件?
extern int a_size;
typedef struct MY_BOARD {
    int n_pieces;
    int board[8][8];
} t_board;