g를 사용한 C 컴파일에 대한 철저하고 장황한 경고 플래그
Gcc는 개발자가 잠재적인 문제를 감지하는 데 도움이 되는 포괄적인 경고 플래그 세트를 제공합니다. 그들의 코드. C에서 철저하고 자세한 경고를 활성화하려면 다음 권장 사항을 고려하십시오.
필수 경고:
- -pedantic: 엄격한 준수 C 언어 표준.
- -Wall: 일반적으로 허용되는 모든 항목을 활성화합니다. warnings.
- -Wextra: -Wall 이상으로 경고 범위를 확장합니다.
- -Wcast-align: 잘못 정렬된 포인터 캐스트를 감지합니다.
- -Wcast-qual: 포인터 유형 변경에 대해 경고합니다. qualifiers.
- -Wctor-dtor-privacy: 클래스 생성자 및 소멸자 액세스 수정자와 관련된 문제를 강조합니다.
- -Wdisabled-optimization: 코드 식별 최적화할 수 있지만 최적화할 수는 없습니다.
- -Wformat=2: 형식 지정자를 개선합니다. 컴파일 중 처리.
- -Winit-self: 변수가 자체적으로 다시 초기화되는 것을 방지합니다.
- -Wlogical-op: 잠재적인 연산자 우선 순위를 감지합니다. 문제.
- -Wmissing-declarations: 변수 선언 누락에 대해 경고하고 기능.
- -Wmissing-include-dirs: 누락된 포함 디렉터리를 강조 표시합니다.
- -Wnojust: 예외 처리 메커니즘을 권장합니다.
- -Wold-style-cast: 잠재적인 코드 호환성 식별 문제.
- -Woverloaded-virtual: 가상 메서드 오버로드에 대해 경고합니다.
- -Wredundant-decls: 중복 선언을 지적합니다.
- -Wshadow: 의도하지 않은 섀도잉을 방지합니다. 변수.
- -Wsign-conversion: 가능한 기호 변환 오류를 감지합니다.
- -Wsign-promo: 잠재적인 기호 승격 문제를 강조합니다.
- -Wstrict-null-sentinel: null sentinel을 제어하여 코드 안전성 향상 값.
- -Wstrict-overflow=5: 정수 오버플로 수준을 5개의 경고로 제한합니다.
- -Wswitch-default: 포괄적인지 확인합니다. switch 문 처리.
- -Wundef: 정의되지 않은 변수에 대해 경고하거나 매크로.
- -Wno-unused: 더 중요한 문제에 집중할 수 있도록 사용되지 않는 변수 경고를 제외합니다.
선택 사항이지만 의심스러운 경고:
- -Wdisabled-optimization: 최적이 아님을 나타낼 수 있음 코드이지만 반드시 오류는 아닙니다.
- -Wfloat-equal: 안전한 동등 비교를 위해 잠재적으로 거짓양성을 유발할 수 있습니다.
- -Wold-style-cast: 타사 라이브러리에 오탐지가 있을 수 있습니다.
- -Wsign-conversion: 필요 오류를 방지하려면 데이터 유형에 주의를 기울이십시오.
- -Wsign-promo: -Wsign-conversion.
- -Wswitch-default와 유사한 고려 사항 : 스위치 문 사례를 명시적으로 처리하도록 강제하지만 지루할 수 있습니다.
경고 제외:
이러한 경고는 잠재적인 잘못된 긍정 또는 제한된 유용성으로 인해 생략되었습니다.
- -Wabi: 다양한 소스의 바이너리를 컴파일해야 합니다.
- -Waggregate-return: 암시적 데이터 유형을 나타낼 수 있음 Conversions.
- -Wconversion: 무해한 암시적 변환에 대해 경고를 생성할 수 있습니다.
- -Weffc : 관련 없는 경고로 인해 복잡해질 수 있습니다.
- -Winline: 모든 인라인 방식에 적용되지 않을 수 있음 시나리오.
- -Winvalid-pch: 미리 컴파일된 헤더를 사용하지 않는 프로젝트에는 적용되지 않습니다.
- -Wmissing-format-attribute : 일반적으로 사용되지 않는 GNU 확장이 필요합니다.
- -Wpended: 수동 최적화가 필요합니다. 클래스 레이아웃.
- -Wstack-protector: 스택 보호를 위해 특정 컴파일러 플래그가 필요합니다.
- -Wstrict-aliasing=3: 제안이 제한됨 낮은 수준에 비해 추가 경고가 있습니다.
- -Wswitch-enum: 지나치게 제한적이며 모든 사용 사례에 적합하지는 않습니다.
- -Wunsafe-loop-optimizations: 특정 시나리오에서 허위 경고를 생성할 수 있습니다.