- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试学习 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_t
将 long
定义为宏意味着所有后续出现的标记 long
都将替换为标记 int32
。除其他后果外,这会破坏诸如 unsigned long
之类的合法构造:在宏扩展后,此构造将呈现为 unsigned int32_t
。
现在,将 unsigned
与 typedef-name 组合是非法的。 C 语法规定,要指定整数类型,我们必须使用 typedef 名称 或 关键字的组合,例如 unsigned
和 长
,但不能同时进行。
GCC 如何报告此错误有点令人困惑。在处理语句时,
Color = PAIR_NUMBER (ch & A_COLOR);
它扩展了类似函数的宏PAIR_NUMBER
,它的定义方式是包含一系列标记unsigned
和long
。然后,long
进一步扩展为 int32_t
,生成一系列标记 unsigned
和 int32_t
。在扩展位置,编译器不希望在 unsigned
之后出现 typedef-name,因为语法禁止这样做。
然后,它假定这种无效的标记组合是由于某处缺少右括号造成的。在这种情况下,这种假设是错误的,并会导致令人困惑的错误消息。
关于c - make 给我一个错误,我不明白 TurboC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54168482/
我是一名优秀的程序员,十分优秀!