2016-07-13 3 views
1

저는 D를 (어제는 ... 어제 Kotlin 벤치 마크를 찾은 후 ...) 보았고, 현재 제가 대처하고 싶은 언어인지 결정하려고 노력하고 있습니다.D가 args에서 위치를 수신합니까?

커맨드 라인에서 몇 가지 인수를 전달하려고하는데 나는 조금 놀랐습니다. "-Foo -Bar"를 전달한다고 가정 해 봅시다. 내 프로그램은 매우 간단합니다 : 자바에서 오는

import std.stdio; 

void main(string [] args) { 

    foreach(arg; args) { 
     writeln(arg); 
    } 
} 

, 나는

    막대기

  • -foo
  • 를 인쇄하는 데 예상하지만 내 D 프로그램을받을 것으로 보인다는 첫 번째 인수로 위치? 출력은 다음과 같습니다

    • /홈/(사용자 이름)/Java_Projects/HelloD/hellod
    • -foo
    • 막대기

    나는이 검색했지만, 모든 Google은 참조 명중 Java의 -D 스위치에 ... 그럼, 의도 된 동작입니까? 그렇다면 누구나 이유를 알고 있습니까?

  • +1

    예, C++ (그리고 다른 많은 langages)를 인수,이 방식으로 작동합니다. 첫 번째 인수는 항상 실행 파일의 경로입니다. – Nil

    +0

    가능한 [args \ [0 \]이 (가) 실행 경로로 보장됩니까?] (http://stackoverflow.com/questions/383973/is-args0-guaranteed-to-be-the-path-of- 실행) –

    +0

    "중복"은 다른 언어에 대한 것입니다. – Silverclaw

    답변

    7

    C 및 C++에서 상속받은 D에서는 정상입니다. 첫 번째 인수는 프로그램의 이름이므로 다중 용도 프로그램에서 원하는 함수를 결정하는 데 사용할 수 있습니다.

    유닉스 도구 세트 https://busybox.net/이 사용하는 비지 박스

    다양한 유닉스 ls 또는 cp 같은 명령으로 그렇게 하나 개의 프로그램, busybox이 호출 할 수 있습니다 (물론, 최소 사용, 나는 그것이 변경된 경우 확실하지 않다).

    args[0]을 사용하면, 모두 동일한 바이너리 프로그램을 가리키고 있지만 그에 따라 응답하지만 어느 것이 호출되었는지 알 수 있습니다.


    TIP : 당신이에 관심이 있다면, 당신 루프 할 수있는 당신의 foreach(arg; args[1 .. $]) {}

    +0

    감사합니다. 나는 지금까지 C와 같은 언어를 피했고 거기에 정상적이지 않았다. 그리고 Google과 관련된 D 관련 항목은 꽤 어렵습니다. x__x – Silverclaw

    +0

    busybox가 여전히 이것을 사용하고 있음을 확인할 수 있습니다. 또 다른 예제는 mkfs입니다. 여기서 mkfs.ntfs와 같은 fs 관련 명령은 이진 mkfs에 대한 심볼릭 링크입니다. – cym13

    +0

    좀 더 쉽게 Google 능력을 얻으려면 D. – Meta

    관련 문제