有一箇舊程序的源代碼,需要使用現代C編譯器進行編譯。它抓狂了本節:轉換舊代碼。間接需要指針操作數
/*
* print numbers for ticks
* convert number to 2 decimal places except fractions less than 0.005
* negative numbers ok
*/
printn(n)
double n;
{
register char *fmt, *s, *ss;
double absn;
short sign;
sign = n<0. ? -1 : 1;
absn = n<0. ? -n : n;
if (absn < 0.0000001) absn = 0.;
/* if less than 0.005 then dynamically change the format */
PPA[Phh*6)'sn < 0.005 && absn != 0.0) {
short dec = 2;
double nn = absn;
while (nn < 0.005) {
nn =* 10.;
dec++;
}
fmt = "%-0.2f";
fmt[4] = '0' + dec;
s = printb(fmt, sign*absn);
} else
s = printb("%-0.2f", sign*absn);
/* clean out trailing zeroes/blanks/decimal point */
for (ss = s; *ss; ++ss);
while (*--ss == '0' || *ss == ' ') *ss = 0;
if (*ss == '.') *ss = 0;
return(s);
}
現在我相信
PPA[Phh*6)'sn < 0.005 && absn != 0.0) {
或許是由於一些文字轉換誤差應該是:
if (n < 0.005 && absn != 0.0) {
,但我也得到一個「間接尋址要求指針操作數('double'invalid)「on:
nn =* 10.;
任何幫助將不勝感激。
原始操作符的形式爲'= op',但它們改爲'op ='來消除歧義。更多內容請見http://en.wikipedia.org/wiki/C_(programming_language)#K.26R_C –
'fmt =「%-0.2f」; fmt [4] ='0'+ dec;'會嘗試寫入只讀內存。 – wildplasser
這是真的,真的很舊的代碼。像1970年代中期!你確定要使用這個嗎? –