파라미터(컴퓨터 프로그래밍)

Parameter (computer programming)

컴퓨터 프로그래밍에서 파라미터 또는 형식 인수는 서브루틴에 [a][1]입력으로 제공되는 데이터 중 하나를 참조하기 위해 서브루틴에서 사용되는 특별한 종류의 변수이다.이러한 데이터는 서브루틴이 호출/호출되는 인수[2][3][4](종종 실제 인수 또는 실제 매개 변수)입니다.파라미터의 순서부여 리스트는 보통 서브루틴의 정의에 포함되어 서브루틴이 호출될 때마다 그 콜에 대한 인수를 평가하여 결과값을 대응하는 파라미터에 할당할 수 있습니다.

일반적인 수학적 용법에서의 인수와는 달리, 컴퓨터 공학에서의 인수는 호출/호출문의 함수, 프로시저 또는 루틴에 전달/제공되는 실제 입력 표현식인 반면, 파라미터는 서브루틴의 구현 내부의 변수입니다.예를 들어, 예를 들어 다음과 같이 정의하면add로서 서브루틴을 하다.def add(x, y): return x + y,그리고나서x, y파라미터입니다만, 이것이 다음과 같이 호출되는 경우는,add(2, 3),그리고나서2, 3인수입니다.발신측 컨텍스트로부터의 변수(및 그 식)는 인수가 될 수 있습니다.서브루틴이 다음과 같이 호출된 경우a = 2; b = 3; add(a, b)그러면 변수는 a, b값이 아닌 인수입니다. 2, 3자세한 내용은 "파라미터와 인수" 섹션을 참조하십시오.

파라미터가 선언되는 방법과 서브루틴의 파라미터에 (값의) 인수가 전달되는 방법에 대한 시멘틱스는 언어의 평가전략에 의해 정의되며, 특정 컴퓨터 시스템에서 이것이 어떻게 표현되는지에 대한 자세한 내용은 해당 시스템의 호출규칙에 따라 달라집니다.가장 일반적인 경우, 값별 호출에서 파라미터는 인수(인수가 변수인 경우 인수의 로컬(격리된) 복사) 값으로 초기화된 새로운 로컬 변수로서 서브루틴 내에서 동작하지만, 다른 경우, 예를 들어 콜에 의해 호출에 의해 제공되는 인수 변수는 콜 내의 액션에 의해 영향을 받을 수 있다.d 서브루틴

C 프로그래밍 언어의 다음 프로그램은 "SalesTax"라는 이름의 함수를 정의하고 "price"라는 이름의 매개 변수를 하나 가지고 있습니다.가격 유형은 "더블"(즉, 2배 정밀도의 부동 소수점 숫자)입니다.함수의 반환 유형도 이중입니다.

이중으로 하다 판매세금(이중으로 하다 가격.) {   돌아가다 0.05 * 가격.; } 

함수가 정의되면 다음과 같이 호출할 수 있습니다.

판매세금(10.00); 

이 예에서는 인수 10.00을 사용하여 함수가 호출되었습니다.이 경우 10.00이 가격에 할당되고 함수는 결과 계산을 시작합니다.결과를 생성하는 단계가 아래에 {}에 동봉되어 있습니다. 0.05 * price가장 먼저 해야 할 일은 0.05에 가격 값을 곱하는 것입니다. 이 값은 0.50입니다. return함수가 결과를 생성하는 것을 의미합니다.0.05 * price따라서 최종 결과(소수 분수를 2진수로 나타낼 때 발생할 수 있는 반올림 오차 무시)는 0.50이다.

파라미터 및 인수

파라미터와 인수는 프로그래밍 언어에 따라 다른 의미를 가질 수 있습니다.경우에 따라서는 서로 바꾸어 사용하기도 하고, 문맥을 사용하여 의미를 구분하기도 합니다.용어 파라미터(포멀파라미터라고도 함)는 함수 정의에 있는 변수를 나타낼 때 자주 사용되며 인수(실제 파라미터라고도 함)는 함수 호출 시 제공되는 실제 입력을 가리킵니다.예를 들어 함수를 다음과 같이 정의하는 경우def f(x): ...,그리고나서x파라미터이며, 이 파라미터가 에 의해a = ...; f(a)그리고나서a인수입니다.매개 변수는 (무제한) 변수인 반면 인수는 리터럴 또는 변수이거나 리터럴 및 변수를 포함하는 더 복잡한 식일 수 있습니다.Call by value의 경우 함수에 전달되는 것은 인수 값입니다.예를 들어 다음과 같습니다.f(2)그리고.a = 2; f(a)는 동등한 콜입니다.참조별 콜에서는 변수를 인수로 하여 전달되는 것은 해당 변수에 대한 참조입니다.함수 콜의 구문은 [5]그대로 유지되지만,pass-by-reference 또는 pass-by-value에 대한 지정은 함수 선언 및/또는 정의에서 이루어집니다.

파라미터는 프로시저 정의에 표시되고 인수는 프로시저 호출에 표시됩니다.함수 정의에서f(x) = x*x변수x파라미터입니다.함수 호출에서는f(2)값 2는 함수의 인수입니다.대략적으로 파라미터는 유형이고 인수는 인스턴스입니다.

파라미터는 프로시저의 본질적인 속성으로 정의되어 있습니다.예를 들어, 많은 언어에서 제공된 두 정수를 합산하고 합계를 계산하는 절차에는 각 정수에 대해 하나씩 두 개의 매개 변수가 필요합니다.일반적으로 프로시저는 임의의 수의 파라미터를 사용하여 정의할 수도 있고 파라미터가 전혀 정의되지 않을 수도 있습니다.절차에 매개 변수가 있는 경우 해당 정의에서 매개 변수를 지정하는 부분을 매개 변수 목록이라고 합니다.

반면 인수는 프로시저가 호출될 때 프로시저에 제공되는 식입니다[6].일반적으로 하나의 식과 파라미터가 일치합니다.프로시저 정의의 불변 부분을 구성하는 파라미터와는 달리 인수는 콜마다 다를 수 있습니다.프로시저가 호출될 때마다 인수를 지정하는 프로시저 호출 부분을 인수 목록이라고 합니다.

파라미터는 일반적으로 인수라고도 불리지만 런타임에 서브루틴이 호출될 때 파라미터 변수에 할당된 실제 값 또는 참조로 간주될 수 있습니다.서브루틴을 호출하는 코드를 설명할 때 서브루틴에 전달되는 값 또는 참조가 인수이며, 이러한 값 또는 참조가 코드 내에서 제공되는 위치가 파라미터 목록입니다.서브루틴 정의 내의 코드를 논할 때 서브루틴의 파라미터 목록 내의 변수는 파라미터이며 실행 시 파라미터 값은 인수입니다.예를 들어, C에서는 스레드를 다룰 때 일반적으로 void* 유형의 인수를 전달하여 예상된 유형에 캐스팅합니다.

무효 스레드 기능(무효* pThread 인수) {   // 첫 번째 파라미터의 이름은 'pThreadArgument'가 아니라 올바른 것입니다.   // 'pThread Parameter' 입니다.런타임에 사용하는 값은 인수입니다.~하듯이   // 위에서 언급한 용어 매개 변수를 토론할 때 사용합니다.   // 서브루틴 정의. } 

차이를 더 잘 이해하기 위해 C에 기재된 다음 함수를 고려합니다.

인트 (인트 추가 1, 인트 추가 2) {   돌아가다 추가 1 + 추가 2; } 

Sum 함수에는 addend1addend2라는2개의 파라미터가 있습니다.매개 변수에 전달된 값을 추가하고 결과를 서브루틴의 호출자에게 반환합니다(C 컴파일러가 자동으로 제공하는 기술을 사용).

Sum 함수를 호출하는 코드는 다음과 같습니다.

인트 값 1 = 40; 인트 값 2 = 2; 인트 sum_value = (값 1, 값 2); 

변수 value1 및 value2는 값으로 초기화됩니다.value1value2는 모두 이 컨텍스트에서 sum 함수의 인수입니다.

실행 시 이러한 변수에 할당된 값은 Sum 함수에 인수로 전달됩니다.Sum 함수에서는 파라미터 addend1addend2를 평가하여 각각 인수 40 및 2를 산출한다.인수 값이 추가되고 결과가 발신자에게 반환되며 여기서 변수 sum_value에 할당됩니다.

파라미터와 인수의 차이로 인해 부적절한 인수를 프로시저에 제공할 수 있습니다.콜이 너무 많은 인수를 제공하거나 너무 적은 인수를 제공하거나 하나 이상의 인수가 잘못된 유형이거나 인수가 잘못된 순서로 제공될 수 있습니다.이러한 상황 중 하나에 의해 파라미터와 인수 리스트가 일치하지 않게 되어 의도하지 않은 응답이 반환되거나 런타임에러가 발생하는 경우가 많습니다.

에펠에서의 대안 협약

에펠 소프트웨어 개발 방법 및 언어 내에서 인수매개 변수는 관례에 따라 명확하게 사용됩니다.term 인수는 루틴의 [7]입력에만 사용되며 term 파라미터는 범용 클래스[8]유형 파라미터화에만 사용됩니다.

다음 루틴 정의를 고려합니다.

     (추가 1: 정수; 추가 2: 정수): 정수         하다             결과 := 추가 1 + 추가 2         끝. 

루틴sum두 개의 인수를 받아들이다addend1그리고.addend2이것은 루틴의 형식적인 논쟁이라고 불립니다.에의 문의sum다음과 같이 실제 인수를 지정합니다.value1그리고.value2.

    sum_value: 정수     값 1: 정수 = 40     값 2: 정수 = 2                              sum_value :=  (값 1, 값 2) 

파라미터는 형식 또는 실제 파라미터로 간주됩니다.범용 클래스의 정의에는 정식 범용 파라미터가 사용됩니다.다음 예시에서 클래스는HASH_TABLE는 2개의 정식 범용 파라미터를 갖는 범용 클래스로 선언됩니다.G관심 있는 데이터를 나타냅니다.K데이터의 해시 키를 나타냅니다.

학급 해시_탭LE [G, K -> 해시 가능]               

클래스가 다음 클라이언트의 대상이 되는 경우HASH_TABLE범용 파라미터는 범용파라미터에서 실제 범용 파라미터로 대체됩니다.다음 속성 선언에서는my_dictionary문자열 기반 사전으로 사용됩니다.이와 같이 데이터와 주요 형식 범용 파라미터는 모두 유형의 실제 범용 파라미터로 대체된다.STRING.

    my_my_cretary: 해시_탭LE [스트링, 스트링] 

데이터형

강력한 형식의 프로그래밍 언어에서는 절차 선언에 각 파라미터의 유형을 지정해야 합니다.유형 추론을 사용하는 언어는 함수 본문과 사용법에서 유형을 자동으로 검색하려고 시도합니다.동적으로 입력된 프로그래밍 언어는 런타임까지 유형 해결을 지연시킵니다.약하게 입력된 언어는 거의 또는 전혀 입력되지 않은 해상도를 수행하며, 대신 프로그래머의 정확성에 의존합니다.

일부 언어에서는 서브루틴에 파라미터가 없음을 나타내기 위해 특별한 키워드(: void)를 사용합니다.정식 유형 이론에서는 이러한 함수가 빈 파라미터 목록(유형이 void가 아닌 단위)을 사용합니다.

인수 전달

파라미터에 인수를 할당하는 정확한 메커니즘(인수 패싱이라고 불립니다)은 키워드를 사용하여 지정할 수 있는 파라미터(일반적으로 값에 의한 콜)에 사용되는 평가 전략에 따라 달라집니다.

기본 인수

Ada, C++, Clojure,[citation needed] Common Lisp,[9] Fortran 90,[10] Python, Ruby, Tcl, Windows[citation needed] PowerShell과 같은 일부 프로그래밍 언어는 서브루틴 선언에서 명시적으로 또는 암시적으로 기본 인수를 제공할 수 있습니다.이것에 의해, 발신자는 서브루틴을 호출할 때에, 그 인수를 생략할 수 있습니다.default 인수가 명시적으로 지정되어 있는 경우 해당 값이 발신자에 의해 제공되지 않은 경우 사용됩니다.디폴트 인수가 암묵적인 경우(경우에 따라서는 Optional 의 키워드를 사용하여), 발신자가 값을 제공하지 않는 경우 언어에서는 이미 알려진 값(null, Empty, 제로, 빈 문자열 )이 제공됩니다.

PowerShell의 예:

기능. 문서($g = 1.21) {     "$g기가와트?기가와트?위대한 스콧! } 
PS >문서 1.21기가와트? 1.21기가와트?위대한 스콧!  PS >문서 88 88기가와트?88기가와트?위대한 스콧! 

default 인수는 variable-length 인수목록의 특수한 경우로 간주할 수 있습니다.

가변 길이 파라미터 리스트

일부 언어에서는 가변 개수의 인수를 받아들이도록 서브루틴을 정의할 수 있습니다.이러한 언어의 경우 서브루틴은 인수 목록을 통해 반복되어야 합니다.

PowerShell의 예:

기능. 마티 {     $195s   앞지르다 { "연도로 돌아가 $_" } } 
PS >마티 1985 1985년으로 돌아가서  PS >마티 2015 1985 1955 2015년으로 거슬러 올라가다 1985년으로 돌아가서 1955년으로 거슬러 올라가다 

명명된 파라미터

AdaWindows PowerShell과 같은 일부 프로그래밍 언어에서는 서브루틴에 명명된 매개 변수를 지정할 수 있습니다.이것에 의해, 발신 코드를 보다 자기 문서화할 수 있습니다.또, 대부분의 경우, 인수의 순서를 변경하거나, 필요에 따라서 인수를 생략할 수 있기 때문에, 발신자에게 유연성이 높아집니다.

PowerShell의 예:

기능. 제니퍼($adjective Young, $adjective Old) {     "젊은 제니퍼:저는 $agentive Young입니다!     "올드 제니퍼:나는 $agentive Old! } 
PS >제니퍼 '실패' '필수' Young Jennifer:나 상큼해! 올드 제니퍼:난 노련해!  PS >제니퍼 -주입적 오래된 '필수' - 적극적 영 '실패' Young Jennifer:나 상큼해! 올드 제니퍼:난 노련해! 

기능 언어의 여러 매개 변수

람다 미적분에서는 각 함수에 정확히 하나의 모수가 있습니다.복수의 파라미터를 갖는 함수로 생각되는 것은 보통 람다 미적분학에서 첫 번째 인수를 취하고 나머지 인수를 갖는 함수를 반환하는 것으로 나타난다.이것은 커링이라고 불리는 변환이다.ML 및 Haskell같은 일부 프로그래밍 언어는 이 방식을 따릅니다.이러한 언어에서, 모든 함수는 정확히 하나의 매개변수를 가지고 있으며, 여러 매개변수의 함수의 정의처럼 보일 수 있는 것은 실제로 함수 등을 반환하는 함수의 정의를 위한 통사설탕이다.함수 적용은 람다 미적분뿐만 아니라 이들 언어에서도 좌연관적이기 때문에 복수의 인수에 함수를 적용하는 것처럼 보이는 것은 첫 번째 인수에 적용된 함수로서 올바르게 평가되고, 그 결과 함수는 두 번째 인수에 적용된다.

출력 파라미터

출력 파라미터(out parameter 또는 return parameter라고도 함)는 일반적인 입력이 아닌 출력에 사용되는 파라미터입니다.출력 파라미터는 일부 언어(특히 C 및 C++)[b]에서는 관용어이지만 다른 언어에서는 출력 파라미터가 기본적으로 지원되므로 참조 파라미터에 의한 콜 또는 값이 참조되는 값 파라미터에 의한 콜을 사용합니다.출력 파라미터가 기본적으로 지원되는 언어에는 Ada(Ada 서브프로그램 참조), Fortran(Fortran 90 이후, Fortran "의도" 참조), PL/SQL(PL/SQL [12]함수 참조), Transact-SQL, C#[13] 같은 SQL에 대한 다양한 절차 확장 기능이 있습니다[11].NET Framework,[14] [15]Swift 및 스크립트 언어 TScript(TScript 함수 선언 참조).

보다 정확하게는 입력 파라미터, 출력 파라미터 및 입출력 파라미터 세 가지 파라미터 또는 파라미터 모드를 구분할 수 있습니다.이러한 파라미터는 종종 다음과 같이 표시됩니다.in,out,그리고.in out또는inout입력 인수(입력 파라미터의 인수)는 초기화 변수나 리터럴 등의 값이어야 하며 재정의 또는 할당해서는 안 됩니다.output 인수는 할당 가능한 변수여야 하지만 초기화할 필요는 없습니다.기존 값에 액세스할 수 없으며 값을 할당해야 합니다.input/output 인수는 입력/output 인수로 해야 합니다.값을 할당할 수 있습니다(선택사항으로 값을 할당할 수 있습니다.정확한 요건과 적용은 언어에 따라 다릅니다.예를 들어 Ada 83에서는 할당 후에도 출력 파라미터는 읽기 없이 할당됩니다(보조 어큐뮬레이터 변수의 필요성을 없애기 위해 Ada 95에서는 삭제되었습니다).식에 포함된 이 각각 r-값(값이 있음), l-값(할당 가능) 또는 r-값/l-값(값이 있음 및 할당 가능)이라는 개념과 유사하지만 이러한 용어는 C에서 특수화된 의미를 가집니다.

경우에 따라서는 입력과 입출력만 구별되며, 출력은 입출력의 특정 용도로 간주되며, 다른 경우에는 입출력만 지원됩니다(입출력 제외).기본 모드는 언어에 따라 다릅니다.Fortran 90 입력/출력은 기본이고 C# 및 SQL 확장 입력은 기본이며 TScript에서는 각 파라미터가 입력 또는 출력으로 명시적으로 지정됩니다.

통사적으로 파라미터 모드는 일반적으로 함수 선언에 다음과 같은 키워드로 표시됩니다.void f(out int x)C#. 통상 출력 파라미터는 파라미터 리스트의 끝에 배치되어 명확하게 구별되는 경우가 많습니다.다만, 이것이 항상 따르는 것은 아닙니다.TScript는 다른 접근방식을 사용합니다.이 접근방식에서는 함수 선언 입력 파라미터가 리스트 되고 다음으로 출력 파라미터가 콜론(:)으로 구분되며 이 함수와 같이 텍스트프래그먼트의 크기를 계산하는 함수 자체에 반환 타입은 없습니다.

텍스트 확장(WString 본문, 폰트 폰트 : 정수 , 정수 높이) 

파라미터 모드는 프로그래머의 의도를 기술하고 컴파일러가 오류를 포착하여 최적화를 적용할 수 있도록 하는 표현적 의미론의 한 형태입니다.이것들이 반드시 동작적 의미론(파라미터 전달이 실제로 어떻게 이루어지는지)을 의미하는 것은 아닙니다.특히 입력 파라미터는 값별로 콜별로, 출력 파라미터와 입출력 파라미터는 참조별로 콜별로 구현할 수 있습니다.이것은 빌트인 서포트 없이 이러한 모드를 언어로 실장하는 간단한 방법입니다.다만, 반드시 이러한 방식이 실장되는 것은 아닙니다.이 구별은 Ada '83 Regonics에서 자세히 설명되며, 이는 매개변수 모드가 (참조 또는 복사에 의해) 실제로 [11]구현되는 매개변수 전달 메커니즘으로부터 추상화됨을 강조한다.예를 들어 C#에서는 입력 파라미터(기본값, 키워드 없음)가 값별로 전달되며 출력 파라미터 및 입출력 파라미터(out그리고.ref)는 참조에 의해 PL/SQL 입력 파라미터( )로 전달됩니다.IN)는 참조에 의해 전달되며 출력 파라미터와 입출력 파라미터(OUT그리고.IN OUT디폴트로는 값은 전달되고 결과는 복사되지만 참조에 의해 전달될 수 있습니다.NOCOPY컴파일러 [16]힌트

출력 파라미터와 구문적으로 유사한 구조는 함수와 이름이 같은 변수에 반환값을 할당하는 것입니다.이는 다음 Pascal 예시와 같이 Pascal, Fortran 66 및 Fortran 77에서 볼 수 있습니다.

기능. f(x, y: 정수): 정수; 시작한다.     f := x + y; 끝.; 

이는 호출 시 함수가 단순히 평가된다는 점에서 의미론적으로 다릅니다.즉, 콜링 스코프에서 출력을 저장하는 변수가 전달되지 않습니다.

사용하다

출력 파라미터의 주요 용도는 함수에서 여러 값을 반환하는 것이며, 입출력 파라미터의 용도는 (글로벌 변수와 같은 공유환경이 아닌) 파라미터 전달을 사용하여 상태를 수정하는 것입니다.여러 값을 반환하는 중요한 용도는 값과 오류 상태를 반환하는 반증명 문제를 해결하는 것입니다. "반증명 문제"를 참조하십시오. 복수치 반환.

예를 들어, C의 함수에서 두 변수를 반환하려면 다음과 같이 쓸 수 있습니다.

인트  인트 높이;  F(x, &, &높이); 

어디에x입력 파라미터입니다.width그리고.height출력 파라미터입니다.

C 및 관련 언어의 일반적인 사용 사례는 예외 처리를 위한 것으로 함수는 출력 변수에 반환값을 배치하고 함수의 성공 여부에 따라 부울을 반환합니다.전형적인 예는 다음과 같습니다.TryParse메서드를 지정합니다.NET, 특히 문자열을 정수로 해석하여 반환하는 C#true성공하고 나서false실패했을 때[17]시그니처는 다음과 같습니다.

일반의 정적인 부울 TryParse(스트링 s, 나가. 인트 결과) 

다음과 같이 사용할 수 있습니다.

인트 결과; 한다면 (!Int32.TryParse(s, 결과)) {     // 예외 처리 } 

몇 가지 가능한 유형 중 하나의 값을 반환하는 경우에도 동일한 고려사항이 적용됩니다.반환 값은 유형을 지정하고 여러 출력 변수 중 하나에 값을 저장할 수 있습니다.

결점

현대 프로그래밍에서는 출력 파라미터가 권장되지 않는 경우가 많습니다.기본적으로 어색하고 혼란스러우며 너무 낮은 수준이기 때문에 일반적인 반환값은 상당히 쉽게 이해하고 [18]사용할 수 있습니다.특히 출력 파라미터는 부작용(출력 파라미터 변경)이 있는 함수를 포함하고 있으며, 의미적으로는 순수한 함수 및 값보다 더 혼란스러운 참조와 유사하며, 출력 파라미터와 입출력 파라미터의 구분이 미묘할 수 있다.또한 일반적인 프로그래밍 스타일에서는 대부분의 파라미터가 단순한 입력 파라미터이기 때문에 출력 파라미터 및 입출력 파라미터는 이례적이며 오해를 받기 쉽다.

출력 및 입출력 파라미터는 출력이 식 값이 아닌 변수에 저장되므로 함수 합성을 방지합니다.따라서 처음에 변수를 선언한 다음 함수 사슬의 각 단계가 별도의 문이어야 합니다.예를 들어 C++에서는 다음과 같은 함수 구성이 있습니다.

물건 obj = G(y, F(x)); 

대신 출력 및 입출력 파라미터를 사용하여 작성하면 (용)F출력 파라미터입니다.G입력/출력 파라미터):

물건 obj; F(x, &obj); G(y, &obj); 

단일 출력 또는 입출력 파라미터가 있고 반환값이 없는 함수의 특별한 경우, 함수에 의해 출력 또는 입출력 파라미터(또는 C/C++의 경우 해당 주소)도 반환되면 함수 합성이 가능하며, 이 경우 위와 같이 됩니다.

물건 obj; G(y, F(x, &obj)); 

대체 수단

출력 파라미터의 사용예에는 다양한 대안이 있습니다.

함수에서 여러 값을 반환할 경우 다른 방법으로 태플을 반환할 수 있습니다.구문적으로 이것은 Go 또는 Python에서와 같이 자동 시퀀스 언팩과 병렬 할당을 사용할 수 있는 경우 더 명확합니다.

방어하다 f():     돌아가다 1, 2 a, b = f() 

몇 가지 유형의 값 중 하나를 반환하는 경우 태그 부착 유니언을 대신 사용할 수 있습니다.가장 일반적인 경우는 늘 가능한 유형(옵션 유형)입니다.이 경우 반환값은 늘이 되어 장애를 나타낼 수 있습니다.예외 처리의 경우 늘 타입을 반환하거나 예외를 발생시킬 수 있습니다.예를 들어 Python에서는 다음 중 하나를 사용할 수 있습니다.

결과 = 해석(s) 한다면 결과  없음.:     예외 처리 수 

또는 좀 더 관용적으로:

해라:     결과 = 해석(s) 제외하고 해석 오류:     예외 처리 수 

로컬 변수를 필요로 하지 않고 출력 변수를 사용할 때 반환값을 복사하는 미세 최적화는 충분히 정교한 컴파일러에 의해 기존 함수 및 반환값에도 적용할 수 있습니다.

C 및 관련 언어의 출력 파라미터를 대체하는 일반적인 방법은 [13]모든 반환값을 포함하는 단일 데이터 구조를 반환하는 것입니다.예를 들어, 폭과 높이를 캡슐화하는 구조가 지정되면 다음과 같이 쓸 수 있습니다.

폭 높이 폭과 높이 = F(x); 

오브젝트 지향 언어에서는 입력/출력 파라미터를 사용하는 대신 을 공유하여 오브젝트에 참조를 전달한 후 오브젝트를 변환하여 사용할 수 있습니다.다만 변수가 [18]참조하는 오브젝트는 변경되지 않습니다.

「 」를 참조해 주세요.

메모들

  1. ^ 문서에서 "서브루틴"이라는 용어는 논의되는 프로그래밍 언어에 따라 서로 다른 이름과 약간 다른 의미를 갖는 서브루틴과 유사한 구조를 말합니다.
  2. ^ C 와 C++ 는 값에 의한 콜입니다만, 타입이 참조(C/C++ 포인터 또는 C++ 참조)인 경우, 참조의 값을 설정하면, 참조 스타일의 동작에 의한 콜을 생성할 수 있습니다.

레퍼런스

  1. ^ "Passing Information to a Method or a Constructor (The Java™ Tutorials > Learning the Java Language > Classes and Objects)". Oracle.com. Retrieved 2021-09-09. Parameters refers to the list of variables in a method declaration. Arguments are the actual values that are passed in when the method is invoked. When you invoke a method, the arguments used must match the declaration's parameters in type and order.
  2. ^ Prata, Stephen (2004). C primer plus (5th ed.). Sams. p. 276–277. ISBN 978-0-672-32696-7.
  3. ^ "Working Draft, Standard for Programming Language C++" (PDF). www.open-std.org. Archived from the original (PDF) on December 14, 2005. Retrieved 1 January 2018.
  4. ^ Gordon, Aaron. "Subprograms and Parameter Passing". rowdysites.msudenver.edu/~gordona. Archived from the original on 1 January 2018. Retrieved 1 January 2018.
  5. ^ Dollard, Kathleen. "Passing Arguments by Value and by Reference (Visual Basic)". docs.microsoft.com. Retrieved 2018-10-27.
  6. ^ "The GNU C Programming Tutorial". crasseux.com. Retrieved 2018-10-27.
  7. ^ 마이어, 베르트랑오브젝트 지향 소프트웨어 구축, 제2판, 프렌티스 홀, 1997, 페이지 444.
  8. ^ 마이어, 96페이지
  9. ^ "Functions". gigamonkeys.com. Retrieved 2021-06-02.
  10. ^ "optional arguments". www.netlib.org. Retrieved 2021-06-02.
  11. ^ a b 8.2 매개 변수 모드, "Ada® 프로그래밍 언어 설계의 합리성"
  12. ^ 8. PL/SQL 서브프로그램:서브프로그램 파라미터 모드 지정
  13. ^ a b Peter Hallam. "Why does C# have both 'ref' and 'out'?". Archived from the original on 2011-09-26.
  14. ^ 파라미터 방향 열거
  15. ^ 함수 - Swift 프로그래밍 언어 (Swift 4.2)
  16. ^ 8. PL/SQL 서브프로그램: NOCOPY 컴파일러 힌트를 사용한 대규모 데이터 구조 전달
  17. ^ Int32.TryParse 메서드(String, Int32)
  18. ^ a b CA1021: 매개 변수 제외