c# 如果不包含头文件,如何使用来自另一个头文件的#define?

nfg76nw0  于 2022-12-20  发布在  C#
关注(0)|答案(1)|浏览(283)

我目前正在使用FreeRTOS,并注意到一些我以前没有遇到过的事情。
文件"projdefs. h"使用文件"FreeRTOSConfig. h"中的定义,但不包括"FreeRTOSConfig. h"。"projdefs. h"不包括任何其他相关文件。
这怎么可能呢?
案例如下所示:

//projdefs.h

#ifndef pdMS_TO_TICKS
    #define pdMS_TO_TICKS( xTimeInMs )    ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000U ) )
#endif

//FreeRTOSConfig.h
#ifndef configTICK_RATE_HZ
#define configTICK_RATE_HZ (1000)
#endif

我试着用谷歌搜索答案,但一无所获。

daupos2t

daupos2t1#

如果不包含头文件,如何使用来自另一个头文件的#define
候选答案。
1.即使projdefs.h不直接包含FreeRTOSConfig.hprojdefs.h也包含一些包含FreeRTOSConfig.h的.h文件。或者,projdefs.h可能包含一些.h文件,其中包含一些包含FreeRTOSConfig.h的. h文件,等等。(OP确实Assert:“projdefs. h”不包括任何其他与此相关的文件。”)

  1. projdefs.h本身或直接(或间接)包含定义configTICK_RATE_HZ的内容,并且包含FreeRTOSConfig.h的Assert是不正确的。
  2. configTICK_RATE_HZ由编译器定义。
    设计提示:
    查找define、对象、函数或常量的声明/定义位置通常是一件苦差事。
    我发现在"same_prefix.h"内部为它们使用一个通用的prefix_可以缓解这个问题。

相关问题