使用定义的常量(来自Makefile)在C中形成变量名的一部分

Cha*_*Kim 2 c c++ makefile

是否可以使用定义的常量在C中形成变量名的一部分?常量由Makefile定义.(实际上我想通过make参数传递它,如下所示)
例如,我想定义一个数字NUM并使用它声明一个变量.

#define NUM 5
/* I want to declare as below
int var5 
using defined constant `NUM` above
*/
Run Code Online (Sandbox Code Playgroud)

我试过了

int var ## NUM;
Run Code Online (Sandbox Code Playgroud)

但##连接仅用于预处理宏操作,但不起作用.
实际上,常量NUM是从myfile中传入的(通过CFLAGS + = -DNUM = 5).
我怎样才能做到这一点?

ADD1

根据Shachar Shemesh的回答,我试过这个.

=== test.c

#include <stdio.h>

#define compound_id(name1, name2) name1##name2
int compound_id(mynum, NUM);

main()
{
mynum5 = 5;
printf("NUM = %d\n", NUM);
printf("mynum5 = %d\n", mynum5);
Run Code Online (Sandbox Code Playgroud)

== Makefile

ifeq ($(NUM),5)
CFLAGS+=-DNUM=$(NUM)
endif
Run Code Online (Sandbox Code Playgroud)

==命令

make test NUM=5
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

ckim@stph45:/tmp] make test NUM=5
cc -DNUM=5    test.c   -o test
test.c: In function 'main':
test.c:8: error: 'mynum5' undeclared (first use in this function)
test.c:8: error: (Each undeclared identifier is reported only once
test.c:8: error: for each function it appears in.)
make: *** [test] Error 1
Run Code Online (Sandbox Code Playgroud)

怎么了?

添加2

:我也试过了,(没有Makefile,只是运行make test)
=== test.c

#include <stdio.h>

#define NUM 5
#define mynum(X) (int mynum##X;)
mynum(NUM)

main()
{
printf("NUM = %d\n", NUM);
mynum5 = 5;
printf("mynum5 = %d\n", mynum5);

}
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

ckim@stph45:/tmp] make test
cc     test.c   -o test
test.c:5: error: expected identifier or '(' before 'int'
make: *** [test] Error 1
Run Code Online (Sandbox Code Playgroud)

piw*_*iwi 6

您需要使用宏来使用预处理器的串联.但是,为了确保您NUM的预处理也是如此,您必须使用两个级别的宏,例如:

#define CONCAT_IMPL(LHS, RHS) LHS ## RHS
#define CONCAT(LHS, RHS) CONCAT_IMPL(LHS, RHS)
Run Code Online (Sandbox Code Playgroud)

参见Argument Prescan.