lint 명령
용도
C 및 C++ 언어 프로그램에 문제점이 있는지 검사합니다.
구문
lint [ -a ] [ -b ] [ -c ] [ -C ] [ -h ] [ -l키 ] [ -n ] [ -o라이브러리 ] [ -qDBCS ] [ -p ] [ -t ] [ -u ] [ -v ] [ -w 클래스 [클래스 ... ]] [ -x ] [ -MA ] [ -NdNumber ] [ -NlNumber ] [ -NnNumber ] [ -NtNumber ] [ -IDirectory ] [ -DName [=정의 ]] [ -U이름 ] 파일 ...
설명
lint 명령은 C와 C++ 언어 소스 코드에 코딩 및 구문 오류가 있는지 비효율적인 코드나 이식 가능하지 않은 코드가 있는지 검사합니다. 이 프로그램을 사용하여 다음을 수행할 수 있습니다.
- 소스 코드와 라이브러리의 비호환성 식별
- 유형 검토 규칙을 컴파일러에서 보다 더 엄격하게 시행
- 변수에 대한 잠재적 문제점 식별
- 함수에 대한 잠재적 문제점 식별
- 흐름 제어 문제점 식별
- 오류를 발생시키거나 비효율적인 구조 식별
- 미사용 변수 및 함수 선언 식별
- 이식 불가능한 코드 식별
참고: lint 명령으로 C++ 언어 파일을 검사하려면 C Set++ 컴파일러 패키지가 있어야 합니다.
함수의 파일간 사용을 검사하여 다른 인스턴스에는 값을 리턴하지 않고 일부 인스턴스에만 값을 리턴하는 함수, 여러 가지 인수의 번호 또는 유형으로 호출되는 함수, 값이 사용되지 않거나 값은 사용되지만 리턴되지 않는 함수를 찾습니다.
lint 명령은 파일 이름 확장자를 다음과 같이 해석합니다.
- .c 로 끝나는 파일 이름은 C 언어 소스 파일입니다.
- .C (C) 로 끝나는 파일 이름은 C++ 언어 소스 파일입니다.
- .ln으로 끝나는파일 이름은 -c 또는 -o 플래그를 사용할 때 lint 명령이 생성하는 비(非)ASCII 파일입니다.
lint 명령은 다른 접미어가 붙은 파일에 대해 경고하고 해당 파일을 무시합니다.
lint 명령은 .c, .C, .ln 파일과 -l 플래그에 지정된 라이브러리를 취하여 명령행에 나타나는 순서대로 처리합니다. 기본적으로 표준 llib-lc.ln lint 라이브러리를 파일 리스트의 끝에 추가합니다. 그러나 -p 플래그를 선택하면 lint 명령이 llib-port.ln 이식 가능 라이브러리를 사용합니다. 기본적으로 lint가 두 번째로 전달되면 이 파일 리스트에서 상호 호환성을 검사합니다. -c 플래그를 지정하면 .ln 및 llib-lx.ln 파일이 무시됩니다.
-c 및 -o 플래그는 C 및 C++ 언어 소스 파일에 대한 증분식 lint 명령 사용을 허용합니다. 일반적으로 lint 명령은 -c 플래그와 함께 각 소스 파일에 한 번씩 사용합니다. 이 소스 파일 각각은 .c 파일에 .ln 파일 생성을 실행하고 해당 소스 파일에 대한 모든 메시지를 기록합니다. lint 명령을 통해 모든 소스 파일을 개별적으로 실행한 후 -c 플래그 없이 한 번 더 실행하여 필요한 -l 플래그와 함께 모든 .ln 파일을 나열하십시오. 그러면 모든 파일 간 불일치가 기록됩니다. 이 프로시저는 make 명령으로 올바르게 작동하여 소스 파일 세트가 마지막으로 검사된 이후 수정된 소스 파일에 대해서만 lint 명령을 실행할 수 있게 합니다.
lint 및 LINT 프리프로세서 기호는 특정 문제 코드가 lint 명령에 대해 변경 또는 제거될 수 있도록 허용하기 위해 정의됩니다. 따라서 lint 및 LINT 기호는 lint로 검사할 모든 코드의 예약어로 간주해야 합니다.
C 및 C++ 언어 소스 프로그램에서 다음 주석은 소스 프로그램을 검사할 때 lint 명령이 조작하는 방법을 변경합니다.
| 항목 | 설명 |
|---|---|
| /*NOTREACHED*/ | 실행 불가능 코드에 대한 주석을 억제합니다. |
| /*VARARGS번호*/ | 가변적인 수의 인수에 대해 이전 스타일의 다음 함수 선언 검사를 억제하지만 첫 번째 Number 인수의 데이터 유형을 검사합니다. Number에 대한 값을 포함하지 않으면 lint 명령은 인수를 검사하지 않습니다(Number=0). ANSI 함수 프로토타입은 이 주석 메커니즘 대신 생략 기호를 사용하여 지정되지 않은 매개변수를 표시해야 합니다. |
| /*ARGSUSED*/ | 함수 정의 내에서 사용되지 않는 함수 매개변수에 대한 경고를 억제합니다. |
| /*LINTLIBRARY*/ | 이 주석을 파일 처음에 두면 lint 명령이 파일에서 사용하지 않은 함수와 함수 매개변수를 식별하지 않습니다. 라이브러리에서 lint 명령을 실행 중일 때 사용됩니다. |
| /*NOTUSED*/ | 발생 위치에서 시작하는 파일 내에 사용하지 않은 외부 기호, 함수, 함수 매개변수에 대한 경고를 억제합니다. /*LINTLIBRARY*/ 주석 지시문의 수퍼세트이지만 외부 기호에도 적용됩니다. 사용하지 않은 함수 프로토타입 및 기타 외부 오브젝트 선언에 대한 경고 억제에 유용합니다. |
| /*NOTDEFINED*/ | 발생 위치에서 시작하는 파일에서 사용되지만 정의되지 않은 외부 기호 및 함수에 대한 경고를 억제합니다. |
| /*LINTSTDLIB*/ | 함수 프로토타입 선언을 함수 정의로 나타나도록 하여 표준 프로토타입 검사 라이브러리를 헤더 파일로부터 구성할 수 있도록 허용합니다. 이 지시문은 암묵적으로 /*NOTUSED*/ 및 /*LINTLIBRARY*/ 주석 지시문을 모두 활성화하여 경고 잡음 레벨을 줄입니다. |
lint 명령 경고 메시지는 파일 이름과 행 번호를 제공합니다. 각 파일이 최초 패스를 통과할 때 각 파일과 각 행 번호에 대한 경고가 보고 됩니다.
-c 플래그를 지정하지 않으면 lint 명령은 모든 입력 파일로부터 정보를 수집하여 정보의 일관성을 검사합니다. 이 시점에서, 메시지가 지정된 소스 파일 또는 포함된 파일 중 하나에서 제공된 것인지 여부가 명확하지 않으면 lint 명령은 소스 파일 이름과 물음표를 차례로 표시합니다.
많은 표준 헤더 파일을 포함하는 ANSI 프로그램은 -wD 플래그를 설정하여 사용되지 않은 프로토타입에 대한 경고의 수를 줄이고 -n 플래그를 설정하여 ANSI 표준 라이브러리에 대한 검사를 사용 불가능하게 합니다. 비ANSI 프로그램의 경우, -wk 플래그를 지정하여 함수 프로토타입 부재와 관련된 경고의 수를 줄이는 것이 좋습니다.
플래그
| 항목 | 설명 |
|---|---|
| -a | 길지 않은 변수에 long 값을 지정했다는 메시지를 억제합니다. |
| -b | 실행 불가능 중단문에 대한 메시지를 억제합니다. |
| -c | lint 명령이 명령행에서 모든 .c 파일에 대한 .ln 파일을 생성합니다. 이러한 .ln 파일은 lint 명령의 최초 패스에서만 생성되며 함수간 호환성을 검사하지 않습니다. |
| -c | C++ 라이브러리(/usr/lpp//xlC/lib 디렉토리에 있음)를 사용하도록 지정합니다. |
| -h | 버그나 부적절한 스타일을 발견하거나 낭비를 줄이려고 시도하지 않습니다. |
| -l키 | 추가 llib-lKey.ln lint 라이브러리를 포함합니다. 명령행 또는 llib-ldos.ln 라이브러리에서 -lm을 지정하거나 명령행에서 -ldos 플래그를 지정하여 llib-lm.ln math 라이브러리의 lint 버전을 포함할 수 있습니다. 파일 수가 많은 프로젝트의 일부인 파일을 검사할 때 로컬 lint 라이브러리를 포함하려면 이 플래그를 사용하십시오. 이 플래그는 lint 명령이 llib-lc.ln 라이브러리를 사용하는 것을 방지하지 않습니다. lint 라이브러리는 /usr/ccs/lib 디렉토리에 있어야 합니다. |
| -n | 표준 또는 이식 가능 lint 라이브러리와의 호환성 검사를 억제합니다. 이는 ANSI 및 확장 모드 라이브러리에 모두 적용됩니다. |
| -o라이브러리 | lint 명령이 llib-lLibrary.ln lint 라이브러리를 작성합니다. -c 플래그는 -o 플래그 사용을 무효화합니다. 생성된 lint 라이브러리는 lint 명령의 두 번째 패스에 제공되는 입력입니다. -o 플래그는 이 파일이 이름 붙여진 lint 라이브러리에 저장되게 합니다. 추가 메시지 없이 llib-lLibrary.ln을 생성하려면 -x 플래그를 사용하십시오. -v 플래그는 lint 라이브러리에 대한 소스 파일이 외부 인터페이스인 경우 유용합니다(예: llib-lc 파일 작성 방법). 이러한 플래그 설정값도 lint 명령 주석 행을 사용하여 사용할 수 있습니다. |
| -p | 기타 C 언어 방언의 이식성을 검사합니다. |
| -t | 32비트에서 64비트로 이식할 때 문제가 되는
지정이 있는지 검사합니다. 다음 경우만 검사합니다.
|
| -u | 사용되지만 정의되지 않았거나 정의되었지만 사용되지 않은 함수 및 외부 변수에 대한 메시지를 억제합니다. 이 플래그를 사용하여 lint 명령을 더 큰 프로그램 파일의 서브세트에서 실행하십시오. |
| -v | 사용하지 않은 함수 매개변수에 대한 메시지를 억제합니다. |
| -w 클래스 [클래스 ...] | 경고 클래스에 대한 보고를 제어합니다. 모든 경고
클래스는 기본적으로 활성 상태이지만 Class 인수의 일부로
적절한 옵션을 포함하여 개별적으로 비활성화할 수 있습니다. 개별
옵션은 다음과 같이 나열됩니다.
|
| -x | 외부 선언이 있지만 절대로 사용하지 않는 변수에 대한 메시지를 억제합니다. |
| MA | ANSI C 언어 표준 규칙을 시행합니다. 디폴트 모드는 확장 C 모드와 같습니다. ANSI 모드는 디폴트 확장 모드 C lint 라이브러리 대신 표준 ANSI 라이브러리 함수 프로토타입을 앞에 추가합니다. ANSI 모드는 보다 엄격한 파일간 오브젝트 참조를 시행하며 정의 연결 검사를 제공합니다. |
| -Nd번호 | 배열 차원 테이블 크기를 Number로 변경합니다. Number의 디폴트 값은 2000입니다. |
| -Nl번호 | 유형 노드의 수를 Number로 변경합니다. Number의 디폴트 값은 8000입니다. |
| -Nn번호 | 기호 테이블 크기를 Number로 늘립니다. Number의 디폴트 값은 1500입니다. |
| -Nt숫자 | 트리 노드의 수를 Number로 변경합니다. Number의 디폴트 값은 1000입니다. |
또한 lint 명령은 cpp 명령의 다음 플래그를 인식합니다(매크로 프리프로세서).
| 항목 | 설명 |
|---|---|
| -I디렉토리 | Directory를 lint 명령이 #include 파일을 검색하는 디렉토리 리스트에 추가합니다. |
| -D이름[=정의] | Name을 #define 파일에 의한 것처럼 정의합니다. Definition의 디폴트는 값 1입니다. |
| -qDBCS | 현재 로케일로 지정된 복수 바이트 모드를 설정합니다. |
| -U이름 | Name의 초기 정의를 제거합니다. 여기서 Name은 특정 프리프로세서로 사전 정의한 예약된 기호입니다. |
종료 상태
이 명령은 다음과 같은 종료값을 리턴합니다.
| 항목 | 설명 |
|---|---|
| 0 | 정상적으로 완료되었습니다. |
| > 0 | 오류가 발생했습니다. |
예
- 오류가 있는지 C 프로그램을 검토하려면
다음을 입력하십시오.
lint command.c - 일부 메시지를 억제하려면 다음을 입력하십시오.
이 검사는program.c사용하지 않는 함수 매개변수 (-v) 또는 사용하지 않는 외부 (-x) 에 대한 오류 메시지를 표시하지 않습니다.lint -v -x program.c - 추가 lint 라이브러리에 대해 프로그램을
검토하려면 다음을 입력하십시오.
이 검사는program.c/usr/ccs/lib/llib-lc.ln 표준 lint 라이브러리 및 /usr/lib/llib-lsubs.ln lint 라이브러리 모두에 대해lint -lsubs program.c - 이동 가능한 라이브러리와 추가
라이브러리에 대한 검토를 하려면 다음을 입력하십시오.
이 검사는program.c/usr/ccs/lib/llib-port.ln 휴대용 lint 라이브러리 및 /usr/lib/llib-lsubs.ln lint 라이브러리 모두에 대해lint -lsubs -p program.c - 비표준 라이브러리만 검토하려면 다음을 입력하십시오.
이 검사는program.c /usr/lib/llib-lsubs.ln에만 적용됩니다.lint -lsubs -n program.c
파일
| 항목 | 설명 |
|---|---|
| /usr/lib/lint[12} | 프로그램 |
| /usr/ccs/lib/llib-lansi | 표준 ANSI 함수(소스) 선언 |
| /usr/ccs/lib/llib-lansi.ln | 표준 ANSI 함수(2진 형식) 선언 |
| /usr/ccs/lib/llib-lc | 표준 함수(소스) 선언 |
| /usr/ccs/lib/llib-lc.ln | 표준 함수(2진 형식) 선언 |
| /usr/ccs/lib/llib-lcrses | curses 함수(소스) 선언 |
| /usr/ccs/lib/llib-lcrses.ln | curses 함수(2진 형식) 선언 |
| /usr/ccs/lib/llib-lm | 표준 math 함수(소스) 선언 |
| /usr/ccs/lib/llib-lm.ln | 표준 math 함수(2진 형식) 선언 |
| /usr/ccs/lib/llib-port | 이식 가능 함수(소스) 선언 |
| /usr/ccs/lib/llib-port.ln | 이식 가능 함수(2진 형식)에 대한 선언 |
| /usr/lpp//xlC/lib | C++ 라이브러리를 포함하는 디렉토리 |
| /var/tmp/*lint* | 임시 파일 |