美文网首页C语言C/C++
C语言怎么会有这么变态的例子!速来围观!!!

C语言怎么会有这么变态的例子!速来围观!!!

作者: C语言程序狮 | 来源:发表于2018-05-26 15:59 被阅读0次

    在学习C/C++或者想学习C/C++可以加群:775356268,大家一起学习交流

    1.下面这个示例是C语言的痛,main函数返回值是什么?

    typedef struct

    {

    char *key;

    char *value;

    } T1;

    typedef struct

    {

    long type;

    char *value;

    } T3;

    T1 a[] =

    {

    {

    "",

    ((char *)&((T3) {1, (char *) 1}))

    }

    };

    int main() {

    T3 *pt3 = (T3*)a[0].value;

    return pt3->value;

    }

    答案:1(你知道为什么吗?)

    2.下面这个例就更变态了。在GCC的文档中,这个语法是合法的,但是不知道为什么GCC并没有实现。下面的代码返回 2.

    return ((int []){1,2,3,4})[1];

    在学习C/C++或者想学习C/C++可以加群:775356268,大家一起学习交流

    3.在下面的这个示例中,有一个“bar” 函数及其函数指针 “pbar” 的两个拷贝(static 类型一般作用于语句块或文件域).

    int foo() {

    static bar();

    static (*pbar)() = bar;

    }

    static bar() {

    return 1;

    }

    static (*pbar)() = 0;

    4.下面的这个函数返回值是什么?取决于编译器是先处理unsigned long转型,还是负号。

    unsigned long foo() {

    return (unsigned long) - 1 / 8;

    }

    如果是: ((unsigned long) - 1) / 8,那将是一个很大的数。

    如果是: (unsigned long) (- 1 / 8 ), 那将是 0

    在学习C/C++或者想学习C/C++可以加群:775356268,大家一起学习交流

    相关文章

      网友评论

        本文标题:C语言怎么会有这么变态的例子!速来围观!!!

        本文链接:https://www.haomeiwen.com/subject/vtmmjftx.html