| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1184 人关注过本帖
标题:关于 .h .c 多文件程序的问题,搞得晕头转向,大家帮忙
取消只看楼主 加入收藏
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
 问题点数:0 回复次数:7 
关于 .h .c 多文件程序的问题,搞得晕头转向,大家帮忙
我想建一个栈,顺便练习一下用多文件写一个程序
代码如下,一共四个文件(V.h ,F.h ,F.c ,do.c)请高人指教,编译的时候总是出错:

/*   V.h  文件   共享宏及类型 的定义  */

#ifndef V_H
#define V_H


#define TRUE 1
#define FALSE 0

#define LENTH 100

typedef struct {
    int elem[LENTH];
    int top;
} STACK;

#endif



/*  F.h 函数的声明 */
#ifndef F_H
#define F_H

void init_stack(STACK *S);

 
int is_empty(STACK *S);


int is_full(STACK *S);


int push(STACK *S ,int x);


int pop(STACK *S ,int *x);


int get_top(STACK *S ,int *x) ;


#endif


/* F.c 函数的实现 */
#include <stdio.h>
#include "V.h"
#include "F.h"


void init_stack(STACK *S)
{
    S->top = -1;
}

 
int is_empty(STACK *S)
{
    if(S->top == -1)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}



int is_full(STACK *S)
{
    if(S->top == LENTH - 1)
    {
        return  TRUE;
    }
    else
    {
        return FALSE;
    }
}

int push(STACK *S ,int x)
{
    if(S->top == LENTH - 1)
    {
        return  FALSE;
    }

    (S->top)++;
    (S->elem[S->top]) = x;
    return TRUE;
    
}

int pop(STACK *S ,int *x)
{
     if(S->top == -1)
    {
        return FALSE;
    }

     else
     {
         *x = S->elem[S->top];
         (S->top)--;
         return TRUE;
     }

}

int get_top(STACK *S ,int *x)  
{
     if(S->top == -1)
    {
        return FALSE;
    }

     else
     {
         *x = S->elem[S->top];
         return TRUE;
     }

}



/* do.c  这是一个简单的测试*/
#include <stdio.h>
#include "F.h"
#include "V.h"

int main()
{
    STACK *S1;
    int a = 7;
    int *b;
    
    init_stack(S1);
    push(S1,a);
    pop(S1,b);

    printf("%d\n",*b);
    return 0;

}




就这么多,不知道为什么老是出错
搜索更多相关主题的帖子: 晕头转向 文件 
2008-05-04 23:16
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
得分:0 
厄。。。不太清楚,我刚刚学,用的是vc 6.0  怎么加?
2008-05-04 23:23
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
得分:0 
出来的是这个
do.obj : error LNK2001: unresolved external symbol _pop
do.obj : error LNK2001: unresolved external symbol _push
do.obj : error LNK2001: unresolved external symbol _init_stack
Debug/do.exe : fatal error LNK1120: 3 unresolved externals

是不是因为c.h文件没有被添加的原因,怎么添加呢?
2008-05-04 23:32
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
得分:0 
正在摸索中,谢谢指教,等实在搞不出来,再来请教。

再次感谢:)
2008-05-04 23:44
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
得分:0 
现在compile 和 build 都没问题了,之前是因为没有把F.c文件添加到工程中去




单步调试到 F.c 文件的
void init_stack(STACK *S)
{
    S->top = -1;
}  处时出错,


Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
First-chance exception in ff.exe: 0xC0000005: Access Violation.

什么意思.希望有人指教

[[it] 本帖最后由 schoolbug 于 2008-5-5 00:36 编辑 [/it]]
2008-05-05 00:34
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
得分:0 
多谢指点,问题解决了。
两种方法都试过了,都可以。再次感谢!

那种更常用一些?
或者在应用上应该注意些什么,就是那种情况下用第一种方法,那种情况下用第二种方法呢?
2008-05-05 09:24
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
得分:0 
还有一个问题,用 malloc()分配内存的时候,就我这个例子来说,是不是
int a;
int b;
S1 = (STACK *)malloc(sizeof(STACK
assert(S1);

S1 = (STACK *)malloc(sizeof(STACK
assert(S1);
int a;
int b;

是有区别的?用后者的顺序时调试会出错
2008-05-05 10:12
schoolbug
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-5-1
收藏
得分:0 
谢谢,弄清楚很多问题,呵呵。
2008-05-05 10:21
快速回复:关于 .h .c 多文件程序的问题,搞得晕头转向,大家帮忙
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019701 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved