gpt4 book ai didi

c - make 给我一个错误,我不明白 TurboC

转载 作者:行者123 更新时间:2023-11-30 21:32:26 25 4
gpt4 key购买 nike

我正在尝试学习 C,只是为了好玩。我正在使用 Linux 发行版。我正在尝试编译一个使用 kbhit() 的程序。我通过 TurboC ( http://www.sandroid.org/TurboC/#Download ) 找到了一种方法。

我按照说明进行操作,但是 make给我这个:

gettext.c: Dans la fonction « gettextTurboC »:
gettext.c:93:13: warning: les cibles pointées dans l'affectation de « int8_t * » {alias « signed char * »} vers « uint8_t * » {alias « unsigned char * »} diffèrent dans la plage signée [-Wpointer-sign]
TurboData = (int8_t *) dest;
^
In file included from TurboC.h:60,
from conio.h:49,
from gettext.c:42:
TurboC.h:250:14: error: expected « ) » before « int32_t »
#define long int32_t
^~~~~~~
/usr/include/curses.h:1238:66: note: dans l'expansion de la macro « long »
#define PAIR_NUMBER(a) (NCURSES_CAST(int,((NCURSES_CAST(unsigned long,(a)) & A_COLOR) >> NCURSES_ATTR_SHIFT)))
^~~~
gettext.c:124:10: note: pour correspondre à ce « ( »
Color = PAIR_NUMBER (ch & A_COLOR);
^~~~~~~~~~~
gettext.c:125:23: warning: les cibles pointées dans le passage de l'argument 2 de « pair_content » diffèrent dans la plage signée [-Wpointer-sign]
pair_content (Color, &dFore, &dBack);
^~~~~~
In file included from TurboC.h:60,
from conio.h:49,
from gettext.c:42:
/usr/include/curses.h:746:28: note: « short int * » attendu mais l'argument est de type « uint16_t * » {alias « short unsigned int * »}
extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */
^~~~~~~~~~~~
gettext.c:125:31: warning: les cibles pointées dans le passage de l'argument 3 de « pair_content » diffèrent dans la plage signée [-Wpointer-sign]
pair_content (Color, &dFore, &dBack);
^~~~~~
In file included from TurboC.h:60,
from conio.h:49,
from gettext.c:42:
/usr/include/curses.h:746:28: note: « short int * » attendu mais l'argument est de type « uint16_t * » {alias « short unsigned int * »}
extern NCURSES_EXPORT(int) pair_content (NCURSES_PAIRS_T,NCURSES_COLOR_T*,NCURSES_COLOR_T*); /* implemented */
^~~~~~~~~~~~
make: *** [Makefile:126: gettext.o] Error 1

我真的不知道如何处理这个错误:

TurboC.h:250:14: error: expected « ) » before « int32_t »
#define long int32_t

有人可以帮助我吗?

最佳答案

免责声明:我将把研究 Turbo C 在我们这个世纪的有用性问题放在一边。

问题出在TurboC.h:250的宏定义上:

#define long int32_t

这是通过int32_t重新定义内置类型long的尝试。后者在由编译器供应商提供的 stdint.h 中定义。 int32_t 的定义是这样的,它最终映射到一个 32 位长的内置有符号整数类型。鉴于在现代主流架构上 int 是 32 位长,int32_t 的典型定义如下所示:

typedef int int32_t;

无论如何,int32_t 是一个类型定义名称。

通过 int32_tlong 定义为宏意味着所有后续出现的标记 long 都将替换为标记 int32。除其他后果外,这会破坏诸如 unsigned long 之类的合法构造:在宏扩展后,此构造将呈现为 unsigned int32_t

现在,将 unsigned 与 typedef-name 组合是非法的。 C 语法规定,要指定整数类型,我们必须使用 typedef 名称 关键字的组合,例如 unsigned,但不能同时进行。

GCC 如何报告此错误有点令人困惑。在处理语句时,

Color = PAIR_NUMBER (ch & A_COLOR);

它扩展了类似函数的宏PAIR_NUMBER,它的定义方式是包含一系列标记unsignedlong 。然后,long 进一步扩展为 int32_t,生成一系列标记 unsignedint32_t。在扩展位置,编译器不希望在 unsigned 之后出现 typedef-name,因为语法禁止这样做。

然后,它假定这种无效的标记组合是由于某处缺少右括号造成的。在这种情况下,这种假设是错误的,并会导致令人困惑的错误消息。

关于c - make 给我一个错误,我不明白 TurboC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54168482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com