Если вы просто хотите удалить его, запустите код через cpp
:
cpp cpp.c > cppout.c
дает мне
# 1 "cpp.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "cpp.c"
void ellipse(int xc, int yc, int rx, int ry, int color)
{
int x = 0, y = ry;
long rx2 = (long)rx*rx, ry2 = (long)ry*ry;
long crit1 = -(rx2/4 + rx%2 + ry2);
long crit2 = -(ry2/4 + ry%2 + rx2);
long crit3 = -(ry2/4 + ry%2);
long t = -rx2*y;
long dxt = 2*ry2*x, dyt = -2*rx2*y;
long d2xt = 2*ry2, d2yt = 2*rx2;
while (y>=0 && x<=rx)
{
pixel(xc+x, yc+y, color);
if (x!=0 || y!=0)
pixel(xc-x, yc-y, color);
if (x!=0 && y!=0)
{
pixel(xc+x, yc-y, color);
pixel(xc-x, yc+y, color);
}
if (t + ry2*x <= crit1 ||
t + rx2*y <= crit3)
x++, dxt += d2xt, t += dxt;
else if (t - rx2*y > crit2)
y--, dyt += d2yt, t += dyt;
else
{
x++, dxt += d2xt, t += dxt;
y--, dyt += d2yt, t += dyt;
}
}
}
Возможно, у вас возникла проблема с использованием оператора запятой в макросе. Я рекомендую заменить запятые на ;
и поместить части if
внутри {}
с переносом строки. (Здесь я вручную вставил {и}, затем использовал M-x replace-string RET , RET ; C-Q C-J
в Emacs, а затем C-M-\
для отступа в регионе.)
if (t + ry2*x <= crit1 ||
t + rx2*y <= crit3) {
x++;
dxt += d2xt;
t += dxt;
} else if (t - rx2*y > crit2) {
y--;
dyt += d2yt;
t += dyt;
} else {
x++;
dxt += d2xt;
t += dxt;
y--;
dyt += d2yt;
t += dyt;
}