省流版解决方案

  1. 假如定义了enum BasicKind{Int, Float};

那么在声明变量的时候,不要忘记把enum给带上!

BasicKind a; //错啦
enum BasicKind a;//对的
  1. 为头文件声明enum的地方的套一层typedef就行,例如:
typedef enum Basickind
{
    INT,
    FLOAT
} Basickind;

背景

试图在一个头文件中定义若干enum,然后在其他几个文件中使用。

最初根本没多想,直接梭哈:

semantic.h文件如下:

enum Basickind
{
    INT,
    FLOAT
};

semantic.c文件如下:

include "semantic.h"
...
Entry create_entry(Basickind kind){
                   ^^^^^^^^^ 提示找不到Basickind
}
...

被引用的头文件里声明了Basickind这种类型,但怎么就是报错,找不到呢?

解决方案

修改semantic.h文件,为头文件声明enum的地方的套一层typedef,如下:

typedef enum Basickind
{
    INT,
    FLOAT
} Basickind;

原因

未知= =感觉很奇怪的样子

原来是自己一直用的不规范呜呜!!
不修改头文件的话,我们在声明enum类型的变量时,还是应该要加上enum的!!跟结构体是一个道理的!

include "semantic.h"
...
Entry create_entry(enum Basickind kind){
                   ^^^^ ^^^^^^^^^ 这样就能找到啦
}
...

一直以为WSL会自动U盘挂载,因为日常访问其他盘都是/mnt/盘符就好了。
恰巧最近有用WSL读U盘内容的需求,发现并不能自动挂载,找到了这篇资料,记录一下。参考资料遵循CC BY-SA 4.0,那咱也遵守好了~

WSL挂载U盘步骤如下:

  1. 创建挂载点(唔,但是根据分布式课上讲的,叫挂接点更合适?)

    sudo mkdir /mnt/usb_flash
  2. 使用mount命令进行挂载
    这里假设欲挂载的U盘分区在Windows下的盘符为E:,记得根据具体情况修改。

    sudo mount -t drvfs E: /mnt/usb_flash
  3. Enjoy it!

    cd /mnt/usb_flash
    ls

最后的最后,使用完成后把挂载点给拿下来

umount /mnt/usb_flash

如遇权限不够,使用sudo即可,