条件编译的用法
假设:我们的工程中有如下三个文件: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将此程序修改后的具体代码。 夜礼服 发表于 2016-3-4 14:02
是不是可以这样说:#ifndef与#include的位置沒有关系,只是预处理时就可以解决文件重复包含的问题。
yeah, i think so.
你可以多测试一下,反正我用了这么久没遇到过问题。 只包含 b.h 就可以了,因为b.h包含了 a.h 楼主你好, 好多种写法,具体那种才是规范就不知道了:
#ifndef a_h // 这里好多种写法,比如_A_H_ A_H_
#define a_h
#endif n0noper 发表于 2016-3-4 11:02
楼主你好, 好多种写法,具体那种才是规范就不知道了:
那么#include"b.h"该插入到代码的哪个位置呢?令外#define的作用是不是包含头文件呢? 夜礼服 发表于 2016-3-4 11:21
那么#include"b.h"该插入到代码的哪个位置呢?令外#define的作用是不是包含头文件呢?
位置没要求吧。另外,#include "a.h"替换#define 是否可以?可以尝试。 位置如果放在#endif后,那么a.h岂不是会又被包含一次吗? 夜礼服 发表于 2016-3-4 12:28
位置如果放在#endif后,那么a.h岂不是会又被包含一次吗?
根据#代表的"预处理"这个名字可以看出,链接之前就已经处理了,所以不会重复包含。
另外,上边那个我试了一下,不能#include来替换,只能#define{:10_269:} n0noper 发表于 2016-3-4 13:12
根据#代表的"预处理"这个名字可以看出,链接之前就已经处理了,所以不会重复包含。
另外,上边那个我 ...
是不是可以这样说:#ifndef与#include的位置沒有关系,只是预处理时就可以解决文件重复包含的问题。 n0noper 发表于 2016-3-4 14:26
yeah, i think so.
你可以多测试一下,反正我用了这么久没遇到过问题。
谢谢喽
页:
[1]