2011-07-18 6 views
-1

이것은 원래 코드이며 모든 인수를 ivlpp_main을 통해 argcargv을 사용하여 전달하려고합니다.이 프로세스를 단계별로 설명 할 수 있습니까?

static void build_preprocess_command(int e_flag) 
{ 
    ivlpp_main(argc, argv); 
    snprintf(tmp, sizeof tmp, "%s%civlpp %s%s -F\"%s\" -f\"%s\" -p\"%s\" ", 
       pbase, sep, verbose_flag?" -v":"", 
       e_flag?"":" -L", defines_path, source_path, 
       compiled_defines_path);  
} 

이 내 코드입니다

static void build_preprocess_command(int e_flag) 
{ 
    char arg0[] = "%s%civlpp"; 
    char arg1[] = "%s%s"; 
    char arg2[] = "-F\”%s\”"; 
    char arg3[] = "-f\”%s\”"; 
    char arg4[] = "-p\”%s\”"; 
    char arg5[] = "-v"; 
    char arg6[] = "-L"; 
    char **argv[] = { &arg0[0], &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0], &arg6[0], NULL }; 
    int argc = 7;//(int)(sizeof(argv)/sizeof(argv[0])) - 1; 
    ivlpp_main(argc,argv); 
} 
+0

내 코드가 정확한지 여부, &argv을 통과해야해야하지? – imon

+0

'ivlpp_main'의 서명 (선언 방법)은 무엇입니까? –

+0

@imon : 컴파일 해 보셨습니까? 일반적으로 간단한 경험 법칙이 있습니다. 컴파일러가 그것을 좋아하지 않는다면, 아마 부정확합니다. 이것은 대칭 적이 지 않다는 점에 유의하십시오. 컴파일러가이를 받아들이면 여전히 부정확 할 수 있습니다. –

답변

0

내 코드가 정확한지 아닌지? - 아이몬

그것은,

char *argv[] = { ... }; // single pointer array 
int argc = sizeof(argv)/sizeof(argv[0]); // to make it less error prone 

은 또한 당신이

ivlpp_main(argc,&argv); // assuming ivlpp_main() is like main() 
+0

카운트 및 NULL 종료에 대해 아니오입니다. 'main'에'argc'와'argv'의 의미를 유지하기 원한다면. 'argc'는 실제 인자의 개수이고,'argv'는 모든 인자와 함께'NULL'을 더한'char *'의 * 배열입니다. 시작 질문의 의미가 정확합니다. 그런 다음 배열의 유형에 맞습니다. –

관련 문제