argv 끝에는 늘 늘이 있는데 argc가 필요한 이유는 무엇입니까?
아무래도...argv[argc]
항상 있다NULL
그래서, 나는 우리가 논쟁 목록을 통과할 수 있다고 생각한다.argc
싱글.while
loop이 이 작업을 수행합니다.
항상 있는 경우NULL
의 마지막에argv
, 왜 필요한가?argc
?
네.argv[argc]==NULL
가 보증됩니다.C11 5.1.2.1 프로그램 부팅 참조(중요)
이러한 매개변수가 선언된 경우, 주 함수에 대한 매개변수는 다음과 같은 제약을 준수해야 한다.
argc의 값은 음이 아니어야 하며 argv[argc]는 늘 포인터여야 한다.
제공argc
따라서 필수적이지는 않지만 여전히 유용합니다.무엇보다도, 정확한 수의 논쟁이 통과되었는지 빠르게 확인할 수 있습니다.
편집: 질문이 C++를 포함하도록 수정되었습니다. n3337 초안 3.6.1 주요 함수는 다음과 같습니다.
2...d5c는 프로그램이 실행되는 환경에서 프로그램으로 전달되는 인수 수입니다. ......argc 값은 음수가 아니어야 한다.argv[argc] 값은 0이어야 한다.
역사적 이유와 오래된 코드와의 호환성을 위해서입니다.원래 argv 배열의 마지막 요소로 늘 포인터가 존재한다는 보장은 없었습니다.하지만 argc는 항상 존재해왔다.
네.argv[argc]
는 늘 포인터임을 보증합니다. argc
편리함을 위해 사용됩니다.
C99 Regonics의 공식 설명을 인용하여 용장 검사라는 단어를 적어 둡니다.
국제표준 - 프로그래밍 언어 - C © 5.1.2.1 프로그램 부팅의 근거
의 사양
argc
그리고.argv
의 논거로서main
는 광범위한 선행 사례를 인식하고 있습니다.argv[argc]
는, 리스트의 말미에 용장 체크를 실시하기 위해서도, 통상의 프랙티스에 근거해 늘 포인터로 할 필요가 있습니다.
다양한 기준에 의해 요구되기 때문에 우리는 그것을 "필요"하게 됩니다.
이 값은 완전히 무시해도 되지만 첫 번째 파라미터이기 때문에main
파라미터 리스트에 그것이 있어야 합니다.C++(및 비표준 C 방언)에서는 다음과 같은 파라미터 이름을 생략할 수 있습니다(C로 변환하기 쉽습니다).
#include <stdio.h> // C-compatible include, guarantees puts in global namespace
// program will print contents of argv, one item per line, starting from argv[0]
int main(int /*argc*/, char *argv[]) { // uncomment argc for C
//(void)argc; // uncomment statement for C
for (int i=0; argv[i]; ++i) {
puts(argv[i]);
}
return 0;
}
표준 C에서는 일반적인 경고 설정과 함께 사용되지 않는 파라미터가 경고를 생성하며, 이는 다음과 같은 문장으로 수정할 수 있습니다.(void)argc;
코드 생성 없이 이름이 사용됩니다.
argc
많은 프로그램이 카운트를 얻기 위해 파라미터를 이동해야 하기 때문에 좋습니다.길이가 많은 가 있는 배열이 .argc
파라미터, 항목이 배열되어 있을 뿐입니다.
- , "마지막 인수로 접근하다"를 사용하는 이 더 합니다.
argv[argc - 1]
루프가 아니라요. - 것이
argc
로직에서 필요한 경우(이러한 경우가 있습니다)에 카운트를 개별적으로 나타내는 코드를 쓸 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/18547114/why-do-we-need-argc-while-there-is-always-a-null-at-the-end-of-argv
'sourcecode' 카테고리의 다른 글
유효하지 않은 대상 릴리스: 1.7 (0) | 2022.09.16 |
---|---|
왜 내 PHP 앱이 404 오류를 보내지 않나요? (0) | 2022.09.16 |
읽기() 및 쓰기() 함수는 C의 로컬 연결(같은 컴퓨터) 상의 TCP 연결 중에 -1을 반환합니다. (0) | 2022.09.16 |
dup2 / dup - 파일 기술자를 복제해야 하는 이유는 무엇입니까? (0) | 2022.09.16 |
:SSL:http://en.wikipedia.org에CERTIFICATE_VERIFY_FAILED 오류를 매끄럽게 해라. (0) | 2022.09.16 |