在宏或 typedef 的帮助下,C 中的有效表达式:(x) ((x) - 1)

Valid Expression in C with Help of Macro or typedef: (x) ((x) - 1)

在宏或 typedef 的帮助下,"expression" (x) ((x) - 1) 能否成为有效的 C 表达式?

当然可以。如果我们有这个宏

#define x int

那么你的表情就变成了(int)((int) - 1)。它做了一个多余的 -1int 的转换,然后再次转换结果。

毫无意义,但完全正确。

#define x foo

int foo(void *ptr)
{
    return (x)(x -1) ;
}
#define DEC(x) ((x) - 1)

int main(void)
{
  int i = 1;

  printf("before DEC: %d\n", i);

  i = DEC(i);

  printf("after DEC: %d\n", i);
}

给你:

 before DEC: 1
 after DEC: 0

感谢@P__J__ 和@Lxer Lx 以及本书 C Traps and Pitfalls。 在前一个问题中我们只是寻求宏的帮助,但我发现 typedef 也很有帮助。 然后我得到了一个新的答案,如果我们认为未定义的函数指针算法是可以的:

#include <stdio.h>
typedef void (*T)(void *);
void m(void * ok){
    printf("awesome\n");
}
int main(int argc, char *argv[]) {
    T x = m;
    (x) ((x) - 1);
    return 0;
}