매크로는 매개 변수를 수락하고 값을 반환할 수도 있습니다. 이렇게 하는 매크로를 매크로 함수라고 합니다. 매크로 함수를 만들려면 my_val과 같이 원하는 이름이 있는 매개 변수로 매크로를 정의하기만 하면 됩니다. 예를 들어 표준 라이브러리에 정의된 매크로 는 복근으로 매개 변수의 절대 값을 반환합니다. 아래의 자체 버전인 ABS를 정의해 보겠습니다. (우리는 복근과 충돌하지 않도록뿐만 아니라, 모든 매크로는 GNU 코딩 스타일에서 대문자로 정의되어야하기 때문에 대문자로 정의하고 있습니다. 스타일을 참조하십시오.) 매크로 호출을 함수 이름과 일부 인수 양식이 포함된 목록으로 보면 사실상 확장함수와 (평가되지 않은) 인수 양식 목록이 적용됩니다. 매개 변수 지정자는 매크로 호출 인수 양식을 인수로 사용하여 람다 식에 대해 처리됩니다. 그런 다음 본문 양식은 암시적 progn으로 평가되고 마지막 양식의 값은 매크로 호출의 확장으로 반환됩니다. GCC의 식 문을 사용하지 않으면 매크로에서 이 작업을 수행할 수 없습니다. (편집: 쉼표 연산자에도 사용할 수 있습니다… 간과 …

그러나 여전히 읽기가 덜 할 수 있습니다.) 이는 매크로가 전처리되지만 함수는 처리되지 않음을 보여줍니다. 마지막으로, 매크로는 디버깅이 매크로를 단계별로 실행할 수 없기 때문에 이해하기 위해 확장해야 하는 이상한 구문 오류 또는 런타임 오류를 생성하기 어려울 수 있습니다. 자동 평가를 수행하는 문에 나열된 평가를 수행하는 문과 다음 함수에 나열된 계산서에 대한 인수의 식을 평가하기 위해 % SYSFUNC 및 %QSYSFUNC 함수는 기본 SAS 소프트웨어의 대부분의 기능을 만들고 매크로 기능에서 사용할 수 있는 화면 제어 언어입니다. 다음 예제를 고려해 보십시오: 이 매크로는 ?… 사용 합니다…. my_val에 할당된 값에 관계없이 양수를 반환하는 명령 – my_val이 양수로 정의된 경우 매크로는 동일한 숫자를 반환하고 my_val이 음수로 정의된 경우 매크로는 음수(양수)를 반환합니다. (?… 대한 자세한 내용은 결정 참조:…

구조. ABS(-4)를 작성하면 전처리기는 my_val에 대해 -4를 대체합니다. 당신이 ABS (i)를 작성하는 경우, 다음 전처리기는 내_val에 대한 i를 대체합니다, 등등. 매크로는 아래 코드 예제와 같이 두 개 이상의 매개 변수를 사용할 수 있습니다.