10. 작업자의 구덩이를 파고 묻기

하나

int a = -10;
printf("%d\n", sizeof a);//这样写行不行?
printf("%d\n", sizeof int);//这样写行不行?

sizeof a가 정확합니다

sizeof int 오류 0029, sizeof 연산자의 매개 변수는 표현식이어야합니다.

//代码3-非法表达式
int main()
{
    int i = 10;
    i = i-- - --i *(i = -3) * i++ + ++i;
    printf("i = %d\n", i);
    return 0;
}
번역자
-128 Tandy 6000 제닉스 3.2
-95 Think C 5.02 (Macintosh)
-86 RM PowerPC AIX 3.2.5
-85 Sun Sparc cc (K & C 컴파일 문제)
-63 gcc, HP_UX 9.0, Power C 2.0.0
4 Sun Sparc acc (K & C 컴파일러)
21 터보 C / C ++ 4.5
22 FreeBSD 2.1R
30 12 월 알파 0SF1 2.0
36 12 월 VAX / VMS
42 마이크로 소프트 C 5.1

i = i-- - --i *(i = -3) * i++ + ++i;

다른 컴파일러에서 얻은 값도 다릅니다.

//代码4
#include <stdio.h>s
int fun()
{
    static int count = 1;
    return ++count;
}
int main()
{
    int answer;
    answer = fun() - fun() * fun();
    printf("%d\n", answer);//输出多少? 
    return 0;
}

확실하지 않지만 대부분의 컴파일러에서 얻은 결과는 동일하지만 함수 호출 순서를 결정할 수 없습니다.

//代码5
#include <stdio.h>
int main()
{
    int i = 1;
    int ret = (++i) + (++i) + (++i);
    printf("%d\n", ret);
    printf("%d\n", i);
    return 0;
}

Linux : 10 4
비주얼 스튜디오 : 12 4

이 코드에서 첫 번째 +가 실행될 때 세 번째 ++의 실행 여부는 불확실합니다. 연산자의 우선 순위와 연관성은 첫 번째 + 및 세 번째 프리앰블 ++의 순서를 결정할 수 없기 때문입니다.

추천

출처blog.csdn.net/qq_43808700/article/details/112666324