• c语言编译器一个不会报错的陷阱


    1, 由于数字1和小写字母L(l)长得特别像,特别是VS默认字体里的,所以

    double a;
    scanf("%1f",&a);
    
    
    double b;
    scanf("%lf",&b);

    2,  sizeof是如何计算数组大小的

    3, 大小写导致提示 类型转换错误

    typedef struct Anode {
        int adjvex;
        struct ANode * nextarc;
        InfoType info;
    } ArcNode;

    然后在子函数中声明 ArcNode * p;         struct ANode * nextarc;   然后赋值:

    nextarc = p;

    编译器会报错

    MSVC(微软的VC、VS内置编译器)报错

           Error (active) E0513 a value of type "ArcNode *" cannot be assigned to an entity of type "ANode *" 

    GNU系(GCC G++)编译器报错

           error: cannot convert 'ArcNode*' {aka 'Anode*'} to 'ANode*' in assignment

    其实问题就在代码中红色标记的 Anode和ANode,n大小写拼写错误导致编译器识别到struct Anode 和 struct ANode不是同一类型,所以ArcNode和struct ANode也不是同一类型。

    但是为什么第三行

    struct ANode * nextarc;
    没有报错呢?也许是编译器的bug吧,我反馈给微软了。


    另外关于i+++i https://www.zhihu.com/question/20123835
    --------蓝天上的云_转载请注明出处.
  • 相关阅读:
    90. 子集 II 回溯算法
    47. 全排列 II 回溯算法
    40. 组合总和 II
    39. 组合总和 回溯
    NLP 第八课 语言技术-文本与LDA主题模型
    36. 有效的数独
    31. 下一个排列
    HDU 4527
    HDU 4521
    HDU 5191
  • 原文地址:https://www.cnblogs.com/yucloud/p/10035622.html
Copyright © 2020-2023  润新知