programing

함수 호출 전에 (공백) 사용

css3 2023. 9. 12. 20:09

함수 호출 전에 (공백) 사용

중복 가능:
사용하지 않은 반환 값을 무효로 만들기

목적이 무엇입니까?(void)예를 들어 함수 호출 전에

(void)func1();

이건 단순히 전화하는 것과 같은 거라고 생각합니다.func1();

그러므로.(void)단순히 다른 프로그래머들에게 리턴 타입이 무시될 것이라는 것을 알리기 위해 호출합니다. 예를 들어 만약func1()의 리턴 타입을 가지고 있었습니다.int, 또는 컴파일러가 함수에 대해 몇 가지 최적화를 수행할 수 있습니까?아마도 그 이면에는 합법적인 C++인가 아니면 어떤 레거시 코드에서 볼 수 있는 C의 잔재인가 하는 또 다른 이유가 있을 것입니다.

감사해요.

값이 쉼표 연산자의 피연산자이고 쉼표 연산자를 재정의하는 경우 무효 캐스트는 값을 억제합니다.

struct S {
  int operator,(int) { return 0; }
};
std::cout << (S(), 42) << '\n';           // prints '0'
std::cout << ((void) S(), 42) << '\n';    // prints '42'

일부 기능이 "반환 값 미사용/확인 시 경고" 속성으로 선언되면 경고를 방지합니다.

Warning의 중복일 수 있습니다. warning_unused_result 속성으로 선언된 'scanf'의 반환 값을 무시합니다.

gcc 문서 확인 : http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html (http_graphics_graphics)

거의 의미가 없습니다.부작용에만 사용되고 가치가 버려지는 표현인 회피표현으로 노골적으로 선을 돌리고 있습니다.그래서 대사가.

func1();

그리고.

(void)func1();

같은 일을 할 겁니다컴파일러가 표현식의 값이 사용되지 않는다는 것을 알고 있다면 수행할 수 있는 최적화가 있을 수 있지만, 컴파일러는 명시적(공백)이 있건 없건 간에 이를 파악할 수 있을 것입니다.

이것은 프로그래머가 표현식의 값을 사용하지 않는다는 것을 분명히 하려는 문서 형태로 사용될 수 있습니다.

또 다른 이상한 용도는 알 수 없는 리턴 타입의 기능을 사용할 수 있도록 하는 것입니다.,수열 연산자로서의 연산자. 즉,decltype( f(), g() )테크닉, 당신이 말하고 싶은 곳"f의 운용이 가능한(), 힘껏g, 그리고 이런 타입은 우리가 좋아하는 타입이 되기를 원합니다.g()반환합니다."단, 만약f()다음과 같은 유형을 반환합니다.operator,오버로드되면 결과가 예상치 못하게 됩니다.

그래서 당신은decltype( void(f()), g() ), 반환 값을 버립니다.f()발동하기 전에operator,, 따라서 알 수 없는 오버라이드 유형 대신 내장 시퀀스 연산자를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/13954517/use-of-void-before-a-function-call