strcpy(argv[0], arg0)
strcpy(argv[1], arg1)
strcpy(argv[2], arg2)
strcpy(argv[3], arg3)
strcpy(argv[4], arg4)
strcpy(argv[5], arg5)
strcpy(argv[6], arg6)
strcpy(argv[7], arg7)
strcpy(argv[8], arg8)
strcpy(argv[9], arg9)
我知道以下是不对的,但使用宏的正确方法是什么?
#define ARG(i) arg##i
for (i = 0;i < 10; i++)
{
strcpy(arg[i], ARG(i);
}
答案 0 :(得分:2)
您应该将变量strcpy
,arg0
,...,arg1
转换为数组,而不是简化对arg9
的调用顺序。如果你这样做,你将能够在一个简单的循环中完成整个事情。
答案 1 :(得分:2)
我建议你在这种情况下使用数组而不是宏。它更清洁,并且在运行时没有很多条件评估;
char **args[10] = { &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9 };
for( i = 0; i < 10; i++ ) {
strcpy( argv[i], *args[i] );
}
答案 2 :(得分:0)
确实你不能像这样使用##
。
虽然非常尴尬,但这可能会奏效:
#define ARG(i) ((i==0)?arg0:(i==1)?arg1:(i==2)?arg2:(i==3)?arg3:(i==4)?arg4:(i==5)?arg5:(i==6)?arg6:(i==7)?arg7:(i==8)?arg8:(i==9)?arg9:0)
答案 3 :(得分:0)
使用BOOST
#include <stdio.h>
#include <string.h>
#include <boost/preprocessor.hpp>
#define GEN_DEC(x, i, name) char* BOOST_PP_CAT(name, i);
#define GEN_FUNC(x, i, name) strcpy(argv[i], BOOST_PP_CAT(name, i));
int main(int argc, char* argv[]){
BOOST_PP_REPEAT(10,GEN_DEC,arg)
BOOST_PP_REPEAT(10,GEN_FUNC,arg)
return 0;
}
命令行
>gcc -I c:\boost_1_48_0 test.c
检查
>gcc -I c:\boost_1_48_0 test.c -E
输出样本
int main(int argc, char* argv[]){
char* arg0; char* arg1; char* arg2; char* arg3; char* arg4; char* arg5; char* ar
g6; char* arg7; char* arg8; char* arg9;
strcpy(argv[0], arg0); strcpy(argv[1], arg1); strcpy(argv[2], arg2); strcpy(argv
[3], arg3); strcpy(argv[4], arg4); strcpy(argv[5], arg5); strcpy(argv[6], arg6);
strcpy(argv[7], arg7); strcpy(argv[8], arg8); strcpy(argv[9], arg9);
return 0;
}