이 표현은 무엇을 의미하며 왜 컴파일됩니까?
오타가 발생한 후 다음 식(간소화)이 컴파일되어 실행되었습니다.
if((1 == 2) || 0 (-4 > 2))
printf("Hello");
당연히 0은 없어야죠.
컴파일되는 이유와 그 표현은 무엇을 의미합니까?
원본(간체)은 다음과 같습니다.
if((1 == 2) || (-4 > 2))
printf("Hello");
이 중 어느 것도 컴파일되지 않습니다.
if((1 == 2) || true (-4 > 2))
printf("Hello");
if((1 == 2) || 1 (-4 > 2))
printf("Hello");
if((1 == 2) || null (-4 > 2))
printf("Hello");
이것은 특정 '함수가 정의되지 않은' 관용구를 지원하기 위한 Visual C++ 확장인 것처럼 보입니다.경고 C4353 페이지에서 다음을 수행합니다.
// C4353.cpp
// compile with: /W1
void MyPrintf(void){};
#define X 0
#if X
#define DBPRINT MyPrint
#else
#define DBPRINT 0 // C4353 expected
#endif
int main(){
DBPRINT();
}
라는 취지DBPRINT수술 금지입니다.이 경고는#define DBPRINT __noop대신 VC의 __noop 확장자를 사용합니다.
출력 어셈블리 목록을 보면 디버깅모드에서도 두 번째 구가 생략되어 있음을 알 수 있습니다.
그건 아마도
if((1 == 2) || NULL (-4 > 2))
printf("Hello");
여기서 NULL은 함수 포인터이며 기본적으로는 int...를 반환합니다.실제로 실행 시 발생하는 일은 플랫폼에 따라 다릅니다.
Visual Studio 2012는 다음과 같은 경고를 제공합니다.
경고 C4353: 비표준 내선번호 사용: 함수식으로 상수 0.대신 '_noop' 기능을 사용합니다.
표현식 평가 지점에 "작동 안 함" 어셈블러 명령을 삽입하는 비표준 방법입니다.
사실 이것은 마이크로소프트 고유의 것입니다.
디버깅을 위해 internal을 사용할 수 있습니다.이것에 의해, 함수와 파라메타가 평가되지 않게 됩니다.
사용자의 경우 Microsoft 컴파일러는 0을 사용하여 동일한 작업을 수행하려고 한다고 생각하기 때문에 작동하지만 VS2012에서는 다음과 같은 경고를 보냅니다.
warning C4353: nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead.
상세한 것에 대하여는, http://msdn.microsoft.com/en-us/library/2a68558f(v=vs.71).aspx 를 참조해 주세요.
ubuntu에서는 에러가 표시된다.
int main()
{
if((1 == 2) || 0 (-4 > 2))
printf("Hello");
}
op
niew1.c:3:19: error: called object â0â is not a function
아마0여기서 함수 포인터에 캐스트됩니다.명시적 캐스팅은 다음과 같습니다.
if((1 == 2) || ((int (*)(int)) 0) (-4 > 2))
printf("Hello");
단, 어떤 기능이 있는지 짐작할 수 없습니다.0이 예에서는 에 암시적으로 캐스팅되어 있습니다.
언급URL : https://stackoverflow.com/questions/17858488/what-does-this-expression-mean-and-why-does-it-compile
'programing' 카테고리의 다른 글
| vuetify에서 스크롤 가능한 v-list를 생성하는 방법 (0) | 2022.07.28 |
|---|---|
| Vue 구성 요소 데이터 기능 - 이 비어 있음 (0) | 2022.07.28 |
| Vue CLI: 모듈 '../package를 찾을 수 없습니다.npm 설치 후 json 오류 발생 (0) | 2022.07.28 |
| 다른 컴포넌트에서 App.vue에 액세스하는 방법 (0) | 2022.07.28 |
| 배열은 공변적이지만 일반 분포는 불변인 이유는 무엇입니까? (0) | 2022.07.28 |