반응형
사용되지 않는 함수 매개 변수 값을 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
반응형
'sourcecode' 카테고리의 다른 글
여러 스레드에서 stdlib의 rand() 사용 (0) | 2022.08.03 |
---|---|
실제 예에서는 dup 또는 dup2를 사용합니다. (0) | 2022.08.03 |
C의 구조 크기 (0) | 2022.08.03 |
vuex를 사용하여 이름 지정 모듈에서 getter에 액세스하려면 어떻게 해야 합니까? (0) | 2022.08.03 |
이 네 줄의 까다로운 C 코드 뒤에 있는 개념 (0) | 2022.08.03 |