반응형
아래 프로그램은 C89 모드에서 컴파일 할 때`C89`를, C99 모드에서 컴파일 할 때`C99`를 어떻게 출력합니까?
웹 에서이 C 프로그램을 찾았습니다.
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5//**/
-4.5)));
return 0;
}
이 프로그램의 흥미로운 점은 C89 모드에서 컴파일되어 실행될 C89
때 인쇄 되고 C99 모드에서 컴파일되고 실행될 때 인쇄 C99
됩니다. 그러나이 프로그램이 어떻게 작동하는지 알 수 없습니다.
printf
위의 프로그램에서 두 번째 주장이 어떻게 작동 하는지 설명 할 수 있습니까 ?
C99는 //
스타일 주석을 허용 하지만 C89는 주석을 허용 하지 않습니다. 따라서 번역하려면 :
C99 :
printf("C%d\n",(int)(90-(-4.5 /*Some comment stuff*/
-4.5)));
// Outputs: 99
C89 :
printf("C%d\n",(int)(90-(-4.5/
-4.5)));
/* so we get 90-1 or 89 */
라인 주석은 //
C99부터 도입되었습니다. 따라서 코드는 C89에서 이것과 같습니다
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5/
-4.5)));
return 0;
}
/* 90 - (-4.5 / -4.5) = 89 */
C99에서 이것과 같습니다
#include <stdio.h>
int main(){
printf("C%d\n",(int)(90-(-4.5
-4.5)));
return 0;
}
/* 90 - (-4.5 - 4.5) = 99*/
때문에 //
의견은 C99 이후 표준에 존재하는 코드는 다음과 동일합니다 :
#include <stdio.h>
int main (void)
{
int vers;
#if __STDC_VERSION__ >= 201112L
vers = 99; // oops
#elif __STDC_VERSION__ >= 199901L
vers = 99;
#else
vers = 90;
#endif
printf("C%d", vers);
return 0;
}
올바른 코드는 다음과 같습니다.
#include <stdio.h>
int main (void)
{
int vers;
#if __STDC_VERSION__ >= 201112L
vers = 11;
#elif __STDC_VERSION__ >= 199901L
vers = 99;
#else
vers = 90;
#endif
printf("C%d", vers);
return 0;
}
반응형
'Programing' 카테고리의 다른 글
WPF : 열 / 행 여백 / 패딩이있는 그리드? (0) | 2020.07.09 |
---|---|
HTML 파일을 PDF로 변환 (0) | 2020.07.09 |
Google App Engine 사용에 대한 의견이 있으십니까? (0) | 2020.07.09 |
다운로드 한 글꼴을 해독하지 못했습니다 (0) | 2020.07.09 |
Swing GUI를 가장 잘 배치하는 방법? (0) | 2020.07.09 |