我有两个文件main.c
和header.c
.
main.c
有一些宏STR
,我想根据#define
文件中的一些有条件地定义它。
案例一:
当我包含header.c
在main.c
文件中时,程序运行良好,如下所示:
主程序
#include<stdio.h>
#define _flag_b
#include "header.c"
void main(){
printf("%s", STR);
}
头文件.c
#ifndef _flag_a
#define STR "flag a is activated.\n"
#endif
#ifndef _flag_b
#define STR "flag b is activated.\n"
#endif
汇编
anupam@g3:~/Desktop/OS 2020/so$ gcc main.c
anupam@g3:~/Desktop/OS 2020/so$ ./a.out
flag a is activated.
案例2:
但由于某种原因,我想包含header.c
在 compile 命令中,而不是包含在main.c
. 这为我创造了这个问题,如下所示:
主程序
#include<stdio.h>
#define _flag_b
// #include "header.c"
void main(){
printf("%s", STR);
}
头文件.c
#ifndef _flag_a
#define STR "flag a is activated.\n"
#endif
#ifndef _flag_b
#define STR "flag b is activated.\n"
#endif
汇编
anupam@g3:~/Desktop/OS 2020/so$ gcc main.c header.c
main.c: In function ‘main’:
main.c:7:15: error: ‘STR’ undeclared (first use in this function)
7 | printf("%s", STR);
| ^~~
main.c:7:15: note: each undeclared identifier is reported only once for each function it appears in
header.c:6: warning: "STR" redefined
6 | #define STR "flag b is activated.\n"
|
header.c:2: note: this is the location of the previous definition
2 | #define STR "flag a is activated.\n"
|
我对这个问题做了很多研究,并且能够理解为什么会出现这个问题。但我无法解决这个问题。
请帮助我更好地理解这个问题并提出一些解决方案。也帮助我改写问题。