在_Complex中,波浪号'~'运算符是什么?它是一种扩展吗?

4
在 C99 中,对 _Complex 类型使用 '~' 运算符会执行复共轭。下面是一段示例代码:
#include <complex.h>
#include <stdio.h>
int main()
{
    double _Complex a = 2 + 3 * I;
    printf("%f,%f\n", creal(~a), cimag(~a));
}

输出结果为:

2.000000,-3.000000

这个在gcc和clang中都表现一致,这是一种扩展吗?我似乎在谷歌搜索的各种标准文件中找不到相关参考。

如果这是一种扩展,有没有方法可以禁用它?

1个回答

4
这实际上是gcc的扩展,在 gcc手册的6.11节中有文档记录:

当对具有复杂类型的值使用运算符~时,它执行复共轭操作。这是GNU扩展;对于浮点类型的值,您应该使用ISO C99函数conjf, conjconjl,它们在<complex.h>中声明,并由GCC作为内置函数提供。

如果您使用-pedantic标志进行编译,则会出现警告:

x1.c: In function ‘main’:
x1.c:6:29: warning: ISO C does not support ‘~’ for complex conjugation [-Wpedantic]
     printf("%f,%f\n", creal(~a), cimag(~a));
                             ^
x1.c:6:40: warning: ISO C does not support ‘~’ for complex conjugation [-Wpedantic]
     printf("%f,%f\n", creal(~a), cimag(~a));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接