假设我的头文件中没有私有typedef
。所以我需要连接到从外部指定的类型。换句话说,类型MY_INT
应由接口确定。
这两种方法是否相等?
在 file.h
中#define MY_INT int
在 file.c
中typedef MY_INT my_int;
my_int *a,b;
在 file.c
中typedef int my_int;
my_int *a,b;
两者都声明两个变量:一个指向int和整数变量的指针?
答案 0 :(得分:2)
两者都声明两个变量:一个指向int和整数变量的指针?
简短:是的。
长:
宏替换只不过是纯文本替换。因此,当您#define MY_INT int
时,预处理器在找到MY_INT
时所做的一切都将其替换为int
。
在第一种方法中预处理器处理 file.c 后,它将与第二种方法中的 file.c 完全相同。
您可以查看大多数编译器的预处理器输出。例如。对于GCC,命令看起来像gcc -E -o file.i file.c
。然后 file.i 将包含预处理器输出,以便将实际文件传递给编译器。
这是GCC为您的第一种方法制作的:
# 1 "file1.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "file1.c"
# 1 "file.h" 1
# 2 "file1.c" 2
typedef int my_int;
my_int *a, b;
这是第二个
# 1 "file2.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "file2.c"
# 1 "file.h" 1
# 2 "file2.c" 2
typedef int my_int;
my_int *a, b;
唯一不同的是我使用的文件的名称。其余的完全一样。