鱼C论坛

 找回密码
 立即注册
查看: 1243|回复: 9

条件编译的用法

[复制链接]
发表于 2016-3-4 10:28:09 | 显示全部楼层 |阅读模式
30鱼币
假设:我们的工程中有如下三个文件:a.h,b.h和c.cpp,其中b文件包含了a.h,c文件中又分別包含了a.h和b.h如下:

FiIe:a.h
#include<iostream>
void Function_1()
{
     //do something
}

File:b.h
#include“a.h”
void Function_2(int c)
{
    //using Function;
}

File:c.pp
#include“a.h”
#include“b.h”
int main()

    //
    return 0;

在编译的时候会出现“multiple definition of”错误,原因在于a.h被包含了两次,求用#ifndef#define#endif将此程序修改后的具体代码。

最佳答案

查看完整内容

yeah, i think so. 你可以多测试一下,反正我用了这么久没遇到过问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-4 10:28:10 | 显示全部楼层
夜礼服 发表于 2016-3-4 14:02
是不是可以这样说:#ifndef与#include的位置沒有关系,只是预处理时就可以解决文件重复包含的问题。


yeah, i think so.

你可以多测试一下,反正我用了这么久没遇到过问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-4 10:50:16 | 显示全部楼层
只包含 b.h 就可以了,因为b.h  包含了 a.h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-4 11:02:10 | 显示全部楼层
楼主你好, 好多种写法,具体那种才是规范就不知道了:
#ifndef a_h    // 这里好多种写法,比如_A_H_    A_H_
#define        a_h
#endif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-4 11:21:56 From FishC Mobile | 显示全部楼层
n0noper 发表于 2016-3-4 11:02
楼主你好, 好多种写法,具体那种才是规范就不知道了:

那么#include"b.h"该插入到代码的哪个位置呢?令外#define的作用是不是包含头文件呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-4 12:04:31 | 显示全部楼层
夜礼服 发表于 2016-3-4 11:21
那么#include"b.h"该插入到代码的哪个位置呢?令外#define的作用是不是包含头文件呢?

位置没要求吧。另外,#include "a.h"替换#define 是否可以?可以尝试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-4 12:28:26 From FishC Mobile | 显示全部楼层
位置如果放在#endif后,那么a.h岂不是会又被包含一次吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-4 13:12:07 | 显示全部楼层
夜礼服 发表于 2016-3-4 12:28
位置如果放在#endif后,那么a.h岂不是会又被包含一次吗?

根据#代表的"预处理"这个名字可以看出,链接之前就已经处理了,所以不会重复包含。

另外,上边那个我试了一下,不能#include来替换,只能#define  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-4 14:02:13 From FishC Mobile | 显示全部楼层
n0noper 发表于 2016-3-4 13:12
根据#代表的"预处理"这个名字可以看出,链接之前就已经处理了,所以不会重复包含。

另外,上边那个我 ...

是不是可以这样说:#ifndef与#include的位置沒有关系,只是预处理时就可以解决文件重复包含的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-4 14:46:01 | 显示全部楼层
n0noper 发表于 2016-3-4 14:26
yeah, i think so.

你可以多测试一下,反正我用了这么久没遇到过问题。

谢谢喽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 00:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表