c - 什么是 C 中的 typeof((c) + 1)

标签 c gcc

我在 C 中遇到了一个表达式,例如

typeof((c) + 1) _tmp = c;

这到底是什么意思?

感谢回复。

只有一个疑问?如果 c 的类型是 struct 而不是原始类型,那么 +1 会做什么?

最佳答案

普通 C(而非 C++)中的 typeof 运算符是 GCC 对标准的补充。它告诉编译器您要使用括号中表达式的类型。

使用 typeof 如上所述,您可以声明您或在该上下文中未知类型的变量,使用另一个变量的类型作为引用。也可用于类型转换。

typeof 中的+ 操作有一个特殊的效果。 typeof((c) + 1) 表示“c 的类型或 1 的类型,以提升后保留的那个为准”。请记住,例如,当用于涉及整数的操作时,字符会被提升为整数,整数会被提升为 float , float 会被提升为 double ,等等。

因此,typeof(int_variable + char_variable)int,因为 char 将被提升为 int执行操作。

请注意,只有编译器可以解决这个问题:typeof 不求值,它没有值,在运行时什么也不会发生。

typeof 的完整描述可以是found here .

关于c - 什么是 C 中的 typeof((c) + 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436889/

相关文章:

c++ - linux flex gcc 编译失败,出现 `undefined reference to ` TclReError'`

java - JNI : Problems compiling 64-bit native libraries

c++ - 与常规 GCC 不同,为什么 MinGW GCC 即使使用 `-pedantic-errors` 也可以容忍缺失的返回类型?

c++ - 如何为 extern "C"设置 C 版本?

c - 未知的段错误问题

c - gcc 4.4 与 Visual C++ 2008

c - 修改链接描述文件以使.text节可写,错误

c - 为什么在调用 execvp() 时不能使用 char **myargs 而不是 char *myargs[3]?

c - 如何打印匹配的字符串?

c - Pthread不执行函数