getopt()
과 함께 함수를 작성하여 명령 줄에서 옵션을 가져옵니다. 나는 그것을 컴파일하면,이 경고를 얻을 :C 호환되지 않는 포인터 유형에서 'getopt'인수 2를 전달하는 경고 경고
cc1: warnings being treated as errors
csim.c: In function ‘getArg’:
csim.c:157: error: passing argument 2 of ‘getopt’ from incompatible
pointer type /usr/include/getopt.h:152: note: expected ‘char * const*’
but argument is of type ‘const char **’
는 C 코드 :
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
}
int getArg(int argc, char const *argv[], int *verbose, int *ps,
int *pE, int *pb, char *traceFileName){
int arg;
int argCount;
while ((arg = getopt(argc, argv, "vs:E:b:t:")) != -1){
switch (arg){
case 'v':
*verbose = 1;
break;
default:
printf("%s\n", "Illegal command arguments, please input again");
exit(-1);
break;
}
}
if(argCount < 4){
printf("%s\n", "Illegal command arguments, please input again");
exit(-1);
}
return 0;
}
감사합니다. davmac! 일부 코드에서는 main() 함수가 main (int argc, char ** argv)과 비슷하다는 것을 알 수 있습니다. char * const argv [], char const * argv [] 및 char ** argv와의 차이점은 무엇입니까? – violethaze
'char * const argv []'는'char *'값의 수정 불가능한 배열입니다. 이것은 포인터 (특히'char * const *', 즉 변경 불가능한'char *'값에 대한 포인터)로 변환 될 수 있습니다. 'char const argv []'는 char 값의 변경 불가능한 배열입니다. 'char ** argv'는 포인터를 가리키는 포인터입니다. 'char *'의 배열로서 취급 할 수가 있습니다. – davmac