📄 pr30315.c
字号:
/* { dg-do compile } *//* { dg-options "-O2" } *//* { dg-final { scan-assembler-times "cmp" 4 } } */extern void abort (void);int c;#define PLUSCC1(T, t, C) \T pluscc##t##C (T a, T b) \{ \ T sum = a + b; \ if (sum < C) \ abort (); \ return sum; \}#define PLUSCC(T, t) PLUSCC1(T, t, a) PLUSCC1(T, t, b)#define INCCC1(T, t, C) \T inccc##t##C (T a, T b) \{ \ T sum = a + b; \ if (sum < C) \ c ++; \ return sum; \}#define INCCC(T, t) INCCC1(T, t, a) INCCC1(T, t, b)#define PLUSCCONLY1(T, t, C) \void pluscconly##t##C (T a, T b) \{ \ T sum = a + b; \ if (sum < C) \ abort (); \}#define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)#define MINUSCC(T, t) \T minuscc##t (T a, T b) \{ \ T difference = a - b; \ if (difference > a) \ abort (); \ return difference; \}#define DECCC(T, t) \T deccc##t (T a, T b) \{ \ T difference = a - b; \ if (difference > a) \ c --; \ return difference; \}#define MINUSCCONLY(T, t) \void minuscconly##t (T a, T b) \{ \ T difference = a - b; \ if (difference > a) \ abort (); \}#define TEST(T, t) \ PLUSCC(T, t) \ PLUSCCONLY(T, t) \ INCCC(T, t) \ MINUSCC(T, t) \ MINUSCCONLY(T, t) \ DECCC(T, t)TEST (unsigned long, l)TEST (unsigned int, i)TEST (unsigned short, s) TEST (unsigned char, c)#define PLUSCCZEXT(C) \unsigned long pluscczext##C (unsigned int a, unsigned int b) \{ \ unsigned int sum = a + b; \ if (sum < C) \ abort (); \ return sum; \}PLUSCCZEXT(a)PLUSCCZEXT(b)#define MINUSCCZEXT \unsigned long minuscczext (unsigned int a, unsigned int b) \{ \ unsigned int difference = a - b; \ if (difference > a) \ abort (); \ return difference; \}MINUSCCZEXT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -