명령줄 매개 변수 읽기
저는 파이(π)를 연산하기 위한 작은 프로그램을 일체형으로 만들었습니다.이제 응용 프로그램을 시작할 때 추가 매개 변수로 제공되는 적분을 계산하기 위해 확장하는 방법에 대한 질문에 직면해 있습니다.프로그램에서 이러한 파라미터를 어떻게 처리해야 합니까?
주 함수를 쓸 때 일반적으로 두 가지 정의 중 하나가 나타납니다.
int main(void)
int main(int argc, char **argv)
두 번째 양식을 사용하면 프로그램에 전달된 명령줄 인수와 지정된 인수의 수에 액세스할 수 있습니다(인수는 공백으로 구분됨).
의 주장은.main
다음과 같습니다.
int argc
- 프로그램이 실행될 때 전달된 인수 수입니다.그것은 적어도1
.char **argv
- 이것은 지시사항입니다.char *
. 또는 다음과 같을 수도 있습니다.char *argv[]
, 그 말은 '배열'이란 뜻입니다.char *
'. 이것은 C 스타일의 문자열 포인터의 배열입니다.
기본 예시
예를 들어, C 프로그램에 전달된 인수를 출력하기 위해 이렇게 할 수 있습니다.
#include <stdio.h>
int main(int argc, char **argv)
{
for (int i = 0; i < argc; ++i)
{
printf("argv[%d]: %s\n", i, argv[i]);
}
}
GCC 4.5를 사용하여 전화한 파일을 컴파일하고 있습니다.args.c
. 기본값을 컴파일하고 구축합니다.a.out
실행 가능한
[birryree@lilun c_code]$ gcc -std=c99 args.c
이제 실행...
[birryree@lilun c_code]$ ./a.out hello there
argv[0]: ./a.out
argv[1]: hello
argv[2]: there
그래서 당신은 그것을 볼 수 있습니다.argv
,argv[0]
실행한 프로그램의 이름입니다(표준 정의 동작은 아니지만 일반적입니다).당신의 주장은 시작합니다.argv[1]
그리고 그 이상.
그래서 기본적으로, 만약 당신이 단 하나의 파라미터를 원한다면, 당신은 이렇게 말할 수 있습니다.
./myprogram integral
간단한 케이스
그리고 당신은 확인할 수 있습니다.argv[1]
이었다integral
, 아마strcmp("integral", argv[1]) == 0
.
그래서 당신 코드에...
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
if (argc < 2) // no arguments were passed
{
// do something
}
if (strcmp("integral", argv[1]) == 0)
{
runIntegral(...); //or something
}
else
{
// do something else.
}
}
명령줄 구문 분석 기능 향상
물론, 이 모든 것은 매우 초보적인 것이었고, 프로그램이 복잡해짐에 따라 보다 고급화된 명령줄 처리를 원할 것입니다.이를 위해서는 GNU와 같은 라이브러리를 사용할 수 있습니다.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int i, parameter = 0;
if (argc >= 2) {
/* there is 1 parameter (or more) in the command line used */
/* argv[0] may point to the program name */
/* argv[1] points to the 1st parameter */
/* argv[argc] is NULL */
parameter = atoi(argv[1]); /* better to use strtol */
if (parameter > 0) {
for (i = 0; i < parameter; i++) printf("%d ", i);
} else {
fprintf(stderr, "Please use a positive integer.\n");
}
}
return 0;
}
위의 답변에서 설명한 대로 명령행 인수를 원시적인 방법으로 파싱하는 것은 처리해야 할 매개 변수의 수가 너무 많지 않은 한 합리적입니다.
명령행 인수 처리를 위해 산업 강도 라이브러리를 사용할 것을 강력히 제안합니다.
이것은 당신의 코드를 더 전문적으로 만들어 줄 것입니다.
이러한 C++용 라이브러리는 아래 웹사이트에서 이용 가능합니다.저는 많은 프로젝트에서 이 라이브러리를 사용해 보았는데, 따라서 명령 줄 인수 구문 분석에 가장 쉽지만 유용한 라이브러리 중 하나라고 자신 있게 말할 수 있습니다.또한 단순한 템플릿 라이브러리이기 때문에 프로젝트로 가져오기가 더 쉽습니다.http://tclap.sourceforge.net/
C에서도 비슷한 라이브러리를 이용할 수 있습니다.http://argtable.sourceforge.net/
명령줄 인수를 가져올 수 있는 C 표준 내장 라이브러리도 있습니다. getopt
위키피디아나 C/Unix 의 인수 구문 분석 도우미에서 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/5157337/reading-command-line-parameters
'programing' 카테고리의 다른 글
ActiveRecord 마이그레이션에서 SQL 문을 병렬로 안전하게 실행하려면 어떻게 해야 합니까? (0) | 2023.10.05 |
---|---|
XML 스키마를 프로그램적으로 시각화하는 방법은? (0) | 2023.10.05 |
브라우저 창에 맞게 이미지 크기를 조정하는 방법? (0) | 2023.10.05 |
Python으로 개체 목록에서 중복 제거 (0) | 2023.10.05 |
C 자동 플러시(각 쓰기 후 플러시 stdout)에 해당합니까? (0) | 2023.10.05 |