【发布时间】:2021-06-15 23:59:54
【问题描述】:
目前,我正在处理一个古老的项目,我正在尝试修复一些错误以成功编译它。我对 c 有基本的了解,但不足以完全理解其中的每个错误。
我目前的问题是我收到错误“C80:'*'非法间接”,但我不知道为什么。
代码如下:
/*----------------------------------------------------*/
/* Generating *lpDes("%23,1f")(float)(word/1000) */
/*----------------------------------------------------*/
/* Example: 321 --> 32,1 */
/*----------------------------------------------------*/
void _lWord2Str4f1(LPSTR lpDes, word w)
{
byte b100, b10;
b100 = w/100; w -= 100*b100;
b10 = w/10; w -= 10*b10;
if(b100 > 9) {
*lpDes++ = '*';
*lpDes++ = '*';
*lpDes++ = '*';
*lpDes = '*';
} else {
//Test !!!!!
*lpDes++ = (b100 ? '0' + b100 : ' ');
// *lpDes++ = '0' + b100;
*lpDes++ = '0' + b10;
*lpDes++ = *GetText(TEXT_136); // "Error C80: '*' illegal indirection
*lpDes = '0' + w;
}
}
LPSTR GetText 的定义
/* ------------------------------------------ */
/* Get Text */
/* -------------------------------------------- */
const char far* const far pText_Err = "?";
LPSTR GetText(word wNr)
{
byte bSprache; // Change Language
LPSTR pText;
bSprache = TestVar.bLaendereinstellung; // Test !!! neu 08.03.2002
// bSprache = 0;
pText = (LPSTR)pText_Err; /* Default */
if (wNr < D_MaxText) {
switch(bSprache) {
#if(SPR_EINB_D == TRUE)
case SP_D: pText = (LPSTR)pText_D[wNr]; break;
#endif
#if(SPR_EINB_F == TRUE)
// case SP_F: pText = (LPSTR)pText_F[wNr]; break;
#endif
#if(SPR_EINB_E == TRUE)
case SP_E: pText = (LPSTR)pText_E[wNr]; break;
#endif
default: pText = (LPSTR)pText_D[wNr];
}
}
return (LPSTR)pText;
}
TEXT_136
#define TEXT_136 136
pText_D
const char far* const far pText_D[] =
{
szText000, szText001, szText002, szText003, szText004,
szText005, szText006, szText007, szText008, szText009,
szText010, szText011, szText012, szText013, szText014,
szText015, szText016, szText017, szText018, szText019,
szText020, szText021, szText022, szText023, szText024,
szText025, szText026, szText027, szText028, szText029,
szText030, szText031, szText032, szText033, szText034,
szText035, szText036, szText037, szText038, szText039,
szText040, szText041, szText042, szText043, szText044,
szText045, szText046, szText047, szText048, szText049,
szText050, szText051, szText052, szText053, szText054,
szText055, szText056, szText057, szText058, szText059,
szText060, szText061, szText062, szText063, szText064,
szText065, szText066, szText067, szText068, szText069,
szText070, szText071, szText072, szText073, szText074,
szText075, szText076, szText077, szText078, szText079,
szText080, szText081, szText082, szText083, szText084,
szText085, szText086, szText087, szText088, szText089,
szText090, szText091, szText092, szText093, szText094,
szText095, szText096, szText097, szText098, szText099,
szText100, szText101, szText102, szText103, szText104,
szText105, szText106, szText107, szText108, szText109,
szText110, szText111, szText112, szText113, szText114,
szText115, szText116, szText117, szText118, szText119,
szText120, szText121, szText122, szText123, szText124,
szText125, szText126, szText127, szText128, szText129,
szText130, szText131, szText132, szText133, szText134,
szText135, szText136, szText137, szText138, szText139,
szText140, szText141, szText142, szText143, szText144,
szText145, szText146, szText147, szText148, szText149,
szText150, szText151, szText152, szText153, szText154,
szText155, szText156, szText157, szText158, szText159,
szText160, szText161, szText162, szText163, szText164,
szText165, szText166, szText167, szText168, szText169,
// szText170, szText171, szText172, szText173, szText174,
// szText175, szText176, szText177, szText178, szText179,
};
定义
typedef char far* LPSTR;
我对这段代码的作用一无所知,因为它是 16 位微处理器的古老操作系统的一部分。
我做了一些研究,有人建议将错误部分从 *lpDes++ = *GetText(TEXT_136); 更改为 lpDes++ = *GetText(TEXT_136);,但我不知道这是可能的还是一个好主意。
如何在不改变逻辑的情况下更改代码?
【问题讨论】:
-
你有
GetText的定义吗? -
GetText应该返回一个 char (const) 指针,而它很可能不会。没有GetText()的定义谁知道? -
GetText 是做什么的?
-
我已经添加了定义,但不能说出它的真正作用
-
那么这很可能是你的问题。编译器不知道
GetText()的定义并假定int 作为返回值。对于现代编译器,这至少应该引发警告甚至错误,但如果你还没有看到这个,那么它可能不会这样做。您可以使用我推荐的原型创建一个包含文件(如上所述),或者只是将原型放在模块顶部。
标签: c microprocessors 16-bit