a = 1 + 2 + b;
a = 3 + b;
a = 1; b = a + 2;
a = 1; b = 3; // まず 1 + 2 に置き換えられて、それが計算されて3になる。
a = 1;
label:
b = a + 2;if (a == 0) { b = 1; } else { b = 2; }a = 1;
printf("%d", a);
a++;
printf("%d", a);
a++;
printf("%d", a);a = 1;
printf("%d", 1);
a = 2;
printf("%d", 2);
a = 3;
printf("%d", 3);printf("%d", 1);
printf("%d", 2);
a = 3;
printf("%d", 3);a = x; b = a + 2; c = b * 3;
a = 0;
for (i = 0; i < 10; i++) {
printf("%d", i);
if (a == 0) continue;
printf("hello");
}s = 0;
for (k = 1; k <= 10; k++) {
s += k;
}s = 0; k = 1;
while (k <= 10) {
s += k; k++;
} s = 0; k = 1;
if (k > 10) goto skip; s += k; k++;
if (k > 10) goto skip; s += k; k++;
if (k > 10) goto skip; s += k; k++;
if (k > 10) goto skip; s += k; k++;
if (k > 10) goto skip; s += k; k++;
while (k <= 10) {
s += k; k++;
}
skip: s = 0; k = 1;
s = 1; k = 2;
s = 3; k = 3;
s = 6; k = 4;
s = 10; k = 5;
s = 15; k = 6;
while (k <= 10) {
s += k; k++;
} s = 15; k = 6;
while (k <= 10) {
s += k; k++;
}s = 55;
my_printf("My name is %s.\n", nam);
が
my_puts("My name is ");
my_puts(nam);
my_puts(".\n");
に変換されたらいいのにな・・・。void my_printf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
int i = 0;
while (fmt[i] != 0) {
if (fmt[i] != '%') {
putchar(fmt[i++]);
} else if (fmt[i + 1] == 's') {
my_puts(va_arg(ap, const char *));
i += 2;
} else if (fmt[i + 1] == 'c') {
putchar(va_arg(ap, int));
i += 2;
} else if (fmt[i + 1] == '%') {
putchar('%');
i += 2;
}
// すみません、説明のための手抜きなのでいろいろ足りないところは許してください.
}
va_end(ap);
}putchar('M'); putchar('y'); putchar(' '); ... putchar('i'); putchar('s'); putchar(' ');
my_puts(nam);
putchar('.'); putchar('\n');my_puts("My name is ");
my_puts(nam);
my_puts(".\n");typedef struct Var_ {
int t; // 0:int, 1:char *, 2:double,...
union {
int i;
char *s;
double d;
};
} Var;
void func()
{
Var a, b, c, d;
a.t = 0; a.i = 2;
b.t = 1; b.s = "hello";
c.t = 2; c.d = 3.14;
// 以下、型を気にせずに共通の演算ができる(print, add).
VarPrint(a);
VarPrint(b);
VarPrint(c);
d = VarAdd(a, b); // d = "2hello" になる.
...
}| コメント | お名前 | NameLink | |