eanmos Asked:2020-06-04 15:46:05 +0000 UTC2020-06-04 15:46:05 +0000 UTC 2020-06-04 15:46:05 +0000 UTC 如何知道一个类型是否已经被声明过? 772 假设我们有以下代码: typedef int i32; 如何知道一个类型i32是否已经被声明过?也就是说,类似#ifdefonly for 的东西typedef。 c 3 个回答 Voted Best Answer AnT stands with Russia 2020-06-05T06:41:06Z2020-06-05T06:41:06Z 没办法知道。 如果有远见的代码编写者预见到将来需要进行此类检查,他通常会在类型定义中附带附加宏的定义。因此,例如,一个标准头文件<stdbool.h>包含一个__bool_true_false_are_defined值为的宏定义1。 AlexGlebe 2020-06-04T17:21:49Z2020-06-04T17:21:49Z 有一种双重编译方法,我知道如何在Linux中通过Makefile来实现。首先,编译一个简单的typedef文件。然后检查编译错误代码并#define TYPEREDEFINIED. Makefile : main.o : main.c main.h ..TAB..: if gcc checktypedef.c &> /dev/null ; then ; else OPTIONFORGCC = -DTYPEREDEFINIED ; fi ..TAB..: gcc OPTIONFORGCC main.c .. checktypedef.c : # include <все заголовки из main> typedef unsigned char BYTE ; main.c : # include <все заголовки> # ifdef TYPEREDEFINIED # error Опять! # endif NewView 2020-06-05T05:37:44Z2020-06-05T05:37:44Z 可以在一个文件中声明所有使用的头文件test.c,例如,然后: gcc -E test.c | grep "int32my" 看看结果:)
没办法知道。
如果有远见的代码编写者预见到将来需要进行此类检查,他通常会在类型定义中附带附加宏的定义。因此,例如,一个标准头文件
<stdbool.h>包含一个__bool_true_false_are_defined值为的宏定义1。有一种双重编译方法,我知道如何在Linux中通过Makefile来实现。首先,编译一个简单的typedef文件。然后检查编译错误代码并
#define TYPEREDEFINIED.可以在一个文件中声明所有使用的头文件
test.c,例如,然后:看看结果:)