自从我上次用C编写代码以来已经有好几年了,所以即使我彻底检查了搜索引擎,我也可以肯定我得到的错误非常愚蠢。如果是这种情况,请提前抱歉。

我正在编写的程序越来越大,所以我决定将一些基本功能导出到自制库“ stackmat.c”中
这是具有两个功能的代码,
stackmat.c

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
//#include "stackmat.h"

double *stackmat(double *A, int sizeA[2], int dim)
// dim = 0, output is 1 row of sizeA[0] elements
// dim = 1, output is 0 column of sizeA[1] elements
{   double *B;
    int i;
    B = calloc(sizeA[dim],sizeof(double));
    if (dim == 1)           // size sizeA[1]
    {   for (i=0; i<sizeA[0]*sizeA[1]; i++) B[i%sizeA[1]] += A[i];
    }
    else                // size sizeA[0]
    {   for (i=0; i<sizeA[0]*sizeA[1]; i++) B[i/sizeA[1]] += A[i];
    }
    return B;
}

double *SumMat(double *A, double *B, int sizeA[2], int sizeB[2])
{   int i;
    double *C;
    C = calloc(sizeA[0]*sizeA[1],sizeof(double));
    for (i=0; i<sizeA[0]*sizeA[1]; i++) C[i] = A[i] + B[i];
    return C;
}


标头
栈垫

#ifndef STACKMAT_H_INCLUDED
#define STACKMAT_H_INCLUDED

double *stackmat(double *A, int sA[2], int dim)
double *SumMat(double *A, double *B, int sizeA[2], int sizeB[2])

#endif


和一个简单的调用程序
Checkslantlib.c

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

void main()
{   double *A, *B;
    int i, sA[2] = {4,3};
    A = malloc(12*sizeof(double));
    for (i=0; i<12; i++)    A[i] = (double) 0.5+i;
    for (i=0; i<12; i++)    printf(" %.1f",A[i]);
    B = stackmat(A,sA,1);
    for (i=0; i<3; i++) printf(" %.1f",B[i]);
}


使用“ gcc -c stackmat.c”进行编译时,一切都很好。
但是“ gcccheckslantlib.c -o stackmat.o”返回了我无法理解的错误

checkslantlib.c: In function ‘stackmat’:
checkslantlib.c:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
checkslantlib.c:13: error: expected ‘{’ at end of input


如果我在库中包含标头调用,则这次是库编译返回几乎相同的错误。

任何人都可以看到我在做什么错吗?

最佳答案

函数定义后您缺少分号。

#ifndef STACKMAT_H_INCLUDED
#define STACKMAT_H_INCLUDED

double *stackmat(double *A, int sA[2], int dim);
double *SumMat(double *A, double *B, int sizeA[2], int sizeB[2]);

#endif


编译stackmat.c时不会出现错误,因为您已将#include注释掉。

10-04 19:20