사용자 언어 프로그램에서 사용할 데이터 항목을 사용하려면 먼저 정의해야 합니다. 다음과 같은 세 가지 종류의 정의가 있습니다.
정의가 블록 외부에 있는 경우 상수 또는 변수 정의의 범위는 정의된 행부터 현재 블록의 끝까지 또는 사용자 언어 프로그램의 끝까지입니다.
함수 정의의 범위는 함수 바디의 닫는 중괄호(})에서 사용자 언어 프로그램 끝까지입니다.
상수는 다음과 같이 키워드 enum을 사용하여 정의됩니다.
enum { a, b, c };
이는 3개의 상수인 a, b 및 c를 정의하고 각각 0, 1 및 2 값을 지정합니다.
상수도 다음과 같은 특정 값으로 초기화할 수 있습니다.
enum { a, b = 5, c };
여기서 a는 0이고 b는 5이고 c는 6입니다.
변수 정의의 일반적인 문법은 다음과 같습니다.
[numeric] type identifier [= initializer][, ...];
여기서 type은 데이터 또는 객체 유형 중 하나이고, identifier는 변수의 이름이고, initializer는 선택적 초기 값입니다.
동일한 유형의 여러 변수 정의는 쉼표(,)로 구분됩니다.
identifier 다음에 대괄호 쌍([ ])이 오는 경우 지정된 유형의 변수 배열을 정의하게 됩니다. 배열 크기는 런타임 시 자동으로 조정됩니다.
선택적 키워드 numeric을 문자열 배열과 함께 사용하여 sort() 함수를 통해 영숫자순으로 정렬할 수 있습니다.
기본적으로(initializer가 없는 경우) 데이터 변수는 0(또는 문자열인 경우 "")으로 설정되고 객체 변수는 "유효하지 않습니다".
int i; | i라는 int 변수를 정의합니다. |
string s = "Hello"; | s라는 문자열 변수를 정의하고 "Hello"로 초기화합니다. |
real a, b = 1.0, c; | a, b 및 c라는 세 가지 실수 변수를 정의하고 b를 값 1.0으로 초기화합니다. |
int n[] = { 1, 2, 3 }; | int 배열을 정의하고 처음 세 요소를 1, 2 및 3으로 초기화합니다. |
numeric string names[]; | 영숫자로 정렬할 수 있는 문자열 배열을 정의합니다. |
UL_WIRE w; | w라는 UL_WIRE 객체를 정의합니다. |
객체 유형의 배열 요소 멤버에는 직접 액세스할 수 없습니다. | |
UL_SIGNAL signals[]; | |
... | |
UL_SIGNAL s = signals[0]; | |
printf("%s", s.name); |
사용자 언어 함수를 직접 작성하여 내장 함수와 마찬가지로 호출할 수 있습니다. 함수 정의의 일반적인 문법은 다음과 같습니다.
type identifier(parameters)
{
statements
}
여기서 type은 데이터 또는 객체 유형 중 하나이고, identifier는 함수의 이름이고, parameters는 쉼표로 구분된 매개변수 정의 리스트이고, statements는 일련의 문입니다. 값을 반환하지 않는 함수는 void 유형입니다.
함수를 호출하기 전에 정의해야 하며 함수 호출은 재귀일 수 없습니다(함수는 자신을 호출할 수 없음).
함수 바디의 statements는 매개변수 값을 수정할 수 있지만 함수 호출의 인수에는 영향을 주지 않습니다.
함수의 실행은 return 문으로 종료할 수 있습니다. return 문이 없으면 함수 바디가 닫기 중괄호(})가 될 때까지 실행됩니다.
exit() 함수를 호출하면 전체 사용자 언어 프로그램이 종료됩니다.
사용자 언어 프로그램에 main() 함수가 포함되어 있는 경우 해당 함수가 명시적으로 주 함수로 호출되고 반환 값이 프로그램의 반환 값이 됩니다.
명령행 인수는 전역 내장 변수 argc 및 argv를 통해 프로그램에서 사용할 수 있습니다.
int CountDots(string s)
{
int dots = 0;
for (int i = 0; s[i]; ++i)
if (s[i] == '.')
++dots;
return dots;
}
string dotted = "This.has.dots...";
output("test") {
printf("Number of dots: %d\n",
CountDots(dotted));
}