gpt4 book ai didi

比较 C 中的名称类型

转载 作者:太空狗 更新时间:2023-10-29 15:09:00 25 4
gpt4 key购买 nike

我正在尝试用 C(唉,不是 C++)编写一个宏来捕获某些错误,特别是当我传递错误类型的名称时。

例如,用

typedef int APLNELM;
typedef int APLRANK;
#define IsScalar(a) ((a) == 0)

APLNELM AplNelm = 0;
APLRANK AplRank = 0;

调用IsScalar(AplRank)是正确的,因为Scalar是Rank的概念,但是IsScalar(AplNelm)是错误的,因为Scalar不是#elements的概念。

一些聪明的人能找到一种方法来编写 IsScalar 宏,以便它检查传递给它的名称的类型以确保它是 APLRANK 类型吗?如果提供解决方案,请随意以任何等效方式重写原始示例。

最佳答案

如果只有这两种类型会传递到 isScalar 宏中,那么您可以这样做:

#include <stdio.h>

struct APLNELM {
int nelm;
char a[1];
};

struct APLRANK {
int rank;
char a[2];
};

#define isScalar(b) (sizeof b.a == 2)

int main(void) {
// your code goes here

struct APLNELM temp1;
struct APLRANK temp2;

printf("%d\n", isScalar(temp1));
printf("%d\n", isScalar(temp2));

return 0;
}

这段代码的输出是

0
1

关于比较 C 中的名称类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459954/

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