gpt4 book ai didi

我可以使用 define 指定类型吗

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:09 25 4
gpt4 key购买 nike

假设我的头文件中不能有私有(private)的typedef。所以我需要连接到从外部指定的类型。换句话说,MY_INT 类型应该由接口(interface)决定。

那么这两种方法是否相等?

第一种方法:

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 的指针和一个整型变量?

最佳答案

是否都声明了两个变量:一个指向 int 的指针和一个整型变量?

简短:是的。

长:

宏替换就是纯文本替换。因此,当您 #define MY_INT int 时,预处理器在找到 MY_INT 时所做的一切都是用 int 替换它。

预处理器在第一种方法中处理完 file.c 后,它看起来与第二种方法中的 file.c 完全一样。

您可以查看大多数编译器的预处理器输出。例如。对于 GCC,命令看起来像这样 gcc -E -o file.i file.cfile.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;

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

关于我可以使用 define 指定类型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179812/

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