c# arr_##name在C语言中是什么意思?

bpzcxfmw  于 2023-01-07  发布在  C#
关注(0)|答案(2)|浏览(276)

这个问题是非常具体的代码块,我试图了解代码信号:
第一个月
事实上,如果有一个清晰的解释“数组的定义”,这将是非常有帮助的。工作代码如下相邻元素乘积在C:给定一个整数数组,找出具有最大乘积的相邻元素对并返回该乘积。

// Definition for arrays:
// typedef struct arr_##name {
//   int size;
//   type *arr;
// } arr_##name;
//
// arr_##name alloc_arr_##name(int len) {
//   arr_##name a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
//   return a;
// }
//
//
int solution(arr_integer inputArray) {
    int max = inputArray.arr[0] * inputArray.arr[1];
    for(int i=1; i<inputArray.size-1; i++) {
        int product = inputArray.arr[i] * inputArray.arr[i+1];
        if (max < product) max = product;
    }
    return max;
}
fd3cxomn

fd3cxomn1#

注解掉的代码片段:

// typedef struct arr_##name {
//   int size;
//   type *arr;
// } arr_##name;
//
// arr_##name alloc_arr_##name(int len) {
//   arr_##name a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
//   return a;
// }

必须是一个或多个宏主体的一部分。

#define ARRAY_TYPE(name) \
    typedef struct arr_##name { \
        int size; \
        type *arr; \
    } arr_##name;

在此上下文中,##运算符是连接两个标记的预处理器运算符(它只能有效地出现在宏的主体中)。
宏可用作:

ARRAY_TYPE(shoes);

其将扩展(给予或采取间隔)为:

typedef struct arr_shoes {
        int size;
        type *arr;
    } arr_shoes;
hgqdbh6s

hgqdbh6s2#

typedef struct arr_##name {
  int size;
  type *arr;
} arr_##name;

不是有效的C。这将不会编译。
但是,##在宏中有意义。

#define foo(name) arr_##name

foo(bar)

相当于

arr_bar

相关问题