0

input.c 和 output.h 两个文件,它们位于不同的位置,在激活宏“HEXA”时会打印出 output.c 中的数据。

考虑宏“HEXA”被禁用,当我在 input.c 中调用“active_fun”函数时,我想在 output.h 文件中打印数据。所以我使用了一个全局变量,它的值在调用函数“active_fun”时更新,并且在.h文件中使用全局变量来打印数据,如下所示

输入.c -->

int var=0;                                       
int active_fun (void)                                
{                                                    
  var =1;                                       
}

输出.h --->

#ifdef HEXA|| (var ==1)
   printf("var value is one");
#endif

(我也使用过#ifdef HEXA || defined(var ==1) 即使这个逻辑也不起作用)

我想在激活宏“HEXA”和通过active_fun(禁用宏“HEXA”时)打印.h文件中的数据。

有没有其他方法可以打印 .h 文件中的数据。

4

2 回答 2

0

IMO你应该更喜欢直接和可读:

int should_print = var;
#ifdef HEXA
should_print = 1;
#endif
if (should_print)
{
    printf("var value is one");
}

或者:

#ifndef HEXA
#define HEXA 0
#endif

if (HEXA || var)
{
    printf("var value is one");
}

注意:我还简化了您的var检查,假设它只会是 0 或 1。

于 2021-08-08T11:31:56.783 回答
-1

你可以这样做:

/*
 * If x can be expanded then the expanded version will be stringified
 * unlike regular #x
 */
#define PPSTRFY(x) #x
#define IS_MACRO_DEFINED(m) strcmp(#m, PPSTRFY(m))

/* --- */

if (IS_MACRO_DEFINED(HEXA) || var == 1)
    printf("var value is one");

仅当您这样做时,它才行不通,#define HEXA HEXA但我不明白您为什么要这样做。如果你不包括在内string.h,我认为替换strcmp(#x, PPSTRFY(x))应该(#x != PPSTRFY(x))是一样的,因为相同的字符串文字应该有相同的地址。

于 2021-08-08T11:18:52.147 回答