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
--------蓝天上的云_转载请注明出处.
原文地址:https://www.cnblogs.com/yucloud/p/10035622.html