在C中实现Stack时出现奇怪的错误

时间:2014-03-12 12:41:12

标签: c compiler-errors stack

我试图在C中实现堆栈,它在我的MinGw编译器中出现了奇怪的错误

 gcc -Wall -o stack stack.c 

Stack.c

#include "stack.h"
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>


Stack *create(int size) {
    Stack *result;
    result = (Stack *) malloc(  sizeof(Stack) * size );
    assert(result != NULL);

    result -> file = result;
    result -> maxAllocate = size;
    result -> top = -1;
    return result;
}

stack.h

#define MAX_SIZE 1024

typedef struct {
    void **file;    
    int top;     
    int maxAllocate; // current size of array allocated for stack
} Stack;

Stack *create(int size);        
int   push(Stack *s, void *x);  
void  *pop(Stack *s);           
int   isEmpty(Stack *s);        

错误

C:\test>gcc -Wall -o stack stack.c
stack.c: In function 'create':
stack.c:26:17: warning: assignment from incompatible pointer type [enabled by de
fault]
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a(main.o): In function
 `main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `WinMai
n@16'
collect2: ld returned 1 exit status

2 个答案:

答案 0 :(得分:2)

使用gcc -Wall -o stack stack.c,您只编译stack.c(其中包含o main函数),但对于正常运行的应用程序,您还需要main函数作为主要入口点:{ {3}}

答案 1 :(得分:1)

使用带有gcc选项的-o意味着您要编译,链接和运行您的程序(此命令不会运行它,但通常这就是使用此类用法的原因)。如果没有entry point(在这种情况下它是main函数),您就无法运行程序。

如果您只想检查stack.c编译是否使用gcc -Wall -c stack.c