关于针对 DT_REG 出现红色波浪线的问题(编译错误/IDE警告),以下是 精准解决方案,保持你的代码功能完全不变:

终极解决方案(任选其一)

方案1️⃣:添加宏定义(推荐)
复制代码
#define _GNU_SOURCE  // 必须放在文件最顶部(所有#include之前)
#include <dirent.h>  // 提供DT_REG定义

// 你的原始代码完全不变
if (entry->d_type == DT_REG && is_audio_file(entry->d_name)) {
    int path_len = strlen("music/") + strlen(entry->d_name) + 1;
    player.audio_list[idx] = malloc(path_len);
    snprintf(player.audio_list[idx], path_len, "music/%s", entry->d_name);
    player.audio_names[idx] = strdup(entry->d_name);
    printf("加载音频 %d: %s\n", idx, player.audio_list[idx]);
    idx++;
}
方案2️⃣:编译时添加flag(不修改代码)
复制代码
gcc -D_GNU_SOURCE your_program.c -o output
方案3️⃣:改用stat兼容写法
复制代码
#include <sys/stat.h>

struct stat file_info;
if (stat(entry->d_name, &file_info) == 0 && 
    S_ISREG(file_info.st_mode) &&  // 等价于DT_REG
    is_audio_file(entry->d_name)) 
{
    // 你原有的逻辑完全不变...
}

问题本质

现象 原因 解决方案
DT_REG报红 需要显式启用POSIX/GNU扩展 添加#define _GNU_SOURCE
旧Linux/Unix兼容性 某些系统默认不暴露d_type 改用stat()方案
IDE误报(如VSCode) 头文件索引问题 实际编译能通过即可忽略

验证是否解决

  1. 在代码中打印DT_REG值:

    复制代码
    printf("DT_REG=%d\n", DT_REG);  // 正常应输出8
  2. 如果使用方案1/2后仍报错,说明你的系统确实不支持,请改用方案3(stat)。

选择方案1或2可以保持你的代码 一字不改 直接解决问题。

相关推荐
FPGA小徐2 小时前
STM32五路气敏传感器阵列电路详解:从HHC1000分压到AD8606跟随器和ADC采样
stm32·单片机·嵌入式硬件
Horn Still Sounds4 小时前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件
智感子4 小时前
无人值守称重:地磅系统架构与流程
嵌入式硬件
新晨单片机设计5 小时前
S011C-基于STM32智能灯光控制系统(光强、声音、人体)【Proteus仿真+Keil程序+原理图】
stm32·嵌入式硬件·proteus·智能灯光控制系统
无敌贵点大王6 小时前
RTThread学习记录13——关于要使用一个外设,RTThread与cubemx到底要怎么配合?
c语言·stm32·学习·rtthread
女神下凡8 小时前
芯参谋(26):DDR4_软件设计规范
arm开发·单片机·嵌入式硬件
zd8451015008 小时前
DSLogic逻辑分析仪连接失败
嵌入式硬件
国科安芯9 小时前
星载通信载荷信号处理中抗辐射微控制器的选型与适应性分析
人工智能·嵌入式硬件·mcu·信号处理·risc-v·抗辐射·空间信息
测试学习test10 小时前
SPI读取W25Q64硬件驱动(HAL库)
数据库·stm32·嵌入式硬件·算法
oooost10 小时前
Jupyter Notebook 常用快捷键速查
ide·python·jupyter