sourcecode

사용되지 않는 함수 매개 변수 값을 void로 캐스팅하는 이유는 무엇입니까?

copyscript 2022. 8. 3. 23:09
반응형

사용되지 않는 함수 매개 변수 값을 void로 캐스팅하는 이유는 무엇입니까?

C프로젝트에서 다음 코드를 본 적이 있습니다.

static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
    (void)ud;
    (void)osize;
    /* some code not using `ud` or `osize` */
    return ptr;
}

무효로 하는 두 개의 깁스가 무슨 의미가 있나요?

일부 파라미터는 사용되지 않기 때문에 컴파일러의 경고를 피하기 위해 사용됩니다.

프로토타입에 미사용 파라미터가 있는 이유는 보통 함수가 외부 API에 준거해야 하기 때문입니다.아마 라이브러리 함수이거나 이 호출규칙을 기대하는 다른 함수에 포인터가 전달됩니다.그러나 호출 규약에 의해 사용되는 모든 인수가 함수 자체에 실제로 필요한 것은 아닙니다.

본문에서 파라미터 이름을 언급하는 이유는 다음과 같은 경고를 피하기 위해서입니다.

unused.c: In function ‘l_alloc’:
unused.c:3:22: warning: unused parameter ‘ud’ [-Wunused-parameter]
 void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
                      ^~

이 경고는 기능 본체의 실제 파라미터를 사용하여 억제할 수 있습니다.예를 들어, 다음과 같은 문장이 있는 경우:

ud;

이 경고는 이제 억제되었습니다.그러나 이제 GCC는 다른 경고를 생성합니다.

unused.c:5:5: warning: statement with no effect [-Wunused-value]
     ud;
     ^~

경고는 이 스테이트먼트가ud;을 주지 이 있습니다은, 「C」의 「」의 「C」라고 하는 것은, 「C」라고 하는 문장과는 다릅니다.

abort;

'어느 쪽인가'라고 있을 이다.abort();대신 무언가를 하기 위해서요.

거기서부터가 '아예'가 되는 거죠.(void)- 이에게 명확하고 전혀 있음을 .

언급URL : https://stackoverflow.com/questions/4647665/why-cast-an-unused-function-parameter-value-to-void

반응형