我可以使用define指定类型

时间:2016-03-23 13:39:52

标签: c

假设我的头文件中没有私有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和整数变量的指针?

1 个答案:

答案 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;

唯一不同的是我使用的文件的名称。其余的完全一样。