| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 276 人关注过本帖
标题:静态打桩位置与链接错误,有啥关联吗?
只看楼主 加入收藏
_green_hand
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-3-19
收藏
 问题点数:0 回复次数:0 
静态打桩位置与链接错误,有啥关联吗?
想看看静态链接的问题,写了几个函数:test.h,add.h,add.c,test.c文件,代码如下:
test.h文件
程序代码:
#ifndef __TEST_H__
#define __TEST_H__

#ifdef __cplusplus
extern "C"{
#endif /* __cplusplus */

extern int sub(int x, int y);


#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* __TEST_H__ */
add.h文件
程序代码:
#include "test.h"
#ifndef __ADD_H__
#define __ADD_H__


#ifdef __cplusplus
extern "C"{
#endif /* __cplusplus */

extern int add(int x, int y);

#define DB 1
#ifdef DB
#define sub(x,y) add(x,y)
#endif

#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* __ADD_H__ */
add.c文件
程序代码:
#include <stdio.h>
#include "add.h"

int add(int x, int y)
{
    return (x+y);
}
test.c文件
程序代码:
#include <stdio.h>
#include "test.h"
#include "add.h"

int sub(int x, int y)
{
    return (x-y);
}

int main(int argc, char *argv[])
{
    int num = sub(5,3);
    printf("%d",num);
    for(;1<5;);
}
在编译链接后,会报链接错误add.obj : error LNK2005: _add 已经在 test.obj 中定义
但是如果在add.c文件中去掉头文件#include “add.h”则编译链接是正确;
如果将add.h中如下代码
#define DB 1
#ifdef DB
#define sub(x,y) add(x,y)
#endif
放在test.c文件中,在sub函数定义的下方,则必须在add.c文件中包含#include "add.h"编译链接才正确。
请问这个是什么原因?





2014-03-19 18:31
快速回复:静态打桩位置与链接错误,有啥关联吗?
数据加载中...
 
   



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

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