2012-11-11 1 views
8

GCC에 사용하도록 지시 할 수 있습니까? warn_unused_result 플래그는 해당 기능이 없어도 모든 기능에 사용할 수 있습니까? 왜냐하면 반환 값을 확인하는 것을 잊어 버릴 수 있다면 GCC 고유의 속성을 추가하는 것을 잊을 수 있습니다.warn_unused_result를 GCC의 모든 기능에 적용

다른 컴파일러에서도 가능하다는 것을 알았습니다.

+0

문서 내가 대답이 '아니오'라고하지 않을 것이다 검토에서. –

+0

대안 : 당신은 splint를 통해 프로그램을 실행할 수 있으며 무시 된 반환 값을 테스트 할 수 있습니다 : http://www.splint.org – justin

+0

어떤 컴파일러가이를 지원합니까? – sinelaw

답변

1

아니요. gcc에게 모든 warn_unused_result 플래그를 무시하고, -Wno-unused-result으로 표시 할 수 있지만 각각 -Wunused-result은 플래그 만 경고하기 위해 기본값을 설정합니다. -Wall -Wextra -pedantic으로 컴파일하면 활성화 할 수는 있지만 활성화 할 수 없다면 경고가 표시되어야합니다.

그 외에도 왜이 기능이 필요한지 궁금합니다. 기능 결과를 무시하는 것이 드문 일이 아니며 모든 라이브러리에서 많은 경고가 발생할 수 있습니다.

+2

우리는 우리 자신의 라이브러리를 작성 중이고 최대한 많은 오류를 제외시키고 자합니다. 며칠 전 우리 프로그래머 중 한 명이 __fread__ 결과를 확인하지 못했음을 알았습니다. 사실 이러한 경우는 매우 드물지만 임베디드 시스템의 리소스 부족으로 인해 발생하는 경우 lib는 마스터 응용 프로그램을 손상시키지 않고이를 처리해야합니다. 그래서 가능한 한 많은 수표를 따르기를 원합니다. – PoltoS

+0

@PoltoS : C++을 사용한다면 리턴 타입을 감쌀 수있는 방법이있을 수 있지만, 그것은'warn_unused_result'처럼 작동합니다. – bitmask

+0

우리는 C를 사용하고 있습니다 ... 이상한 GCC는 그런 깃발을 제공하지 않습니다. "사실상"이 플래그를 각 함수에 추가하기 위해 해킹 할 수 있습니까? – PoltoS

0

GCC에서는 가능하지는 않지만 커버 리티 (lity) 및 lint와 같은 정적 분석기를 사용하여이를 포착 할 수 있습니다.

+0

거의 5 년 뒤 좋은 답변;) coverty는 SAAS입니다. 제 3 자 서버에 회사 코드를 업로드 할 수 없습니다. 또한 세 번째 부분 서버는 내 환경 및 시스템 포함 파일에 대해 아무것도 모릅니다. 지금까지는 플랫폼 특정 유형에 대해 불평하지 않는 우수한 정적 분석기를 찾지 못했습니다. – PoltoS

+0

Coverity가 SaaS에서만 제공되는지 확실하지 않습니다. 내 고용주는 커버 리티를 사용하며 조직의 서버를 떠나는 코드는 없다고 생각합니다. https://community.synopsys.com/s/question/0D53400003RpaYWCAZ/can-coverity-connect-be-installed-in-an-isolated-environment – Soorajchirag

0

도움이되는 elfs-clang-plugins (자신이 작성한 오픈 소스)에 clang 플러그인이 있습니다.

GCC 용은 아니지만, 여전히 유용 할 수 있습니다. CI 게이트 키핑 프로세스 (있는 경우)에 추가하거나 잠시 동안 수동으로 실행하면됩니다.

warn_unused_result 플러그인은 warn_unused_result 속성이없는 함수에 경고를 내 보냅니다. 플러그인은 현재 컴파일 유닛에서 선언되거나 정의 된 함수 만 고려하므로 외부 라이브러리는 노이즈를 추가하지 않습니다.

플러그인은 정적 함수 (외부 API를 변경하는 것이 너무 많은 경우)에 대해서만 경고하도록하는 옵션 인 arg, --static-only를 허용합니다.

예 :

int foo(void); 

컴파일러 출력 :

/tmp/test.c:1:5: warning: missing attribute warn_unused_result 
int foo(void);