该宏定义的作用是什么?

我是嵌入式代码的新手,正在阅读恩智浦的示例代码,该示例是为FRDM-KL25Z编写的。在文件main.h中,我不知道这一行:

#ifndef MAIN_H_
#define MAIN_H_

#endif /* MAIN_H_ */

用于什么?我认为也许它定义了main.h的名称是MAIN_H_?但是这个定义的目的是什么?在文件main.c中,它仍然include main.h如下:

#include "main.h"
zw60236636 回答:该宏定义的作用是什么?

假设我有一个这样的头文件:

// foo.h
struct Foo
{
};

然后我不小心将其包含两次:

#include "foo.h"
#include "foo.h"

最终将尝试编译以下内容,这将生成错误...

struct Foo
{
};
struct Foo //< error 'Foo' declared twice
{
};

解决此问题的一种方法是让预处理器删除第二次出现,然后为每个头文件定义一个唯一的标识符。例如

#ifndef FOO_H_
#define FOO_H_
struct Foo
{
};
#endif

现在,如果我们不小心将其包含两次...

#ifndef FOO_H_    //< not yet declared
#define FOO_H_    //< so declare it
struct Foo
{
};
#endif

#ifndef FOO_H_   //< this time FOO_H is defined... 
#define FOO_H_   //< ... so DO NOT include this code. 
struct Foo
{
};
#endif

尽管我个人建议通过略微的非标准(尽管大多数(如果不是全部)编译器支持)来实现相同的目的。

#pragma once   //< only ever include this file once
struct Foo 
{
};
本文链接:https://www.f2er.com/3147462.html

大家都在问