奇怪的C代码在avr-gcc下编译时不应该

ful*_*ead -1 c

嘿,有人可以告诉我这段代码应该做什么,或者甚至允许这种语法在avr-gcc下编译?它是从NanoVM源代码中获取的代码,为avr atmega128rfa1编译它.

//文件本身的缓冲区在eeprom中

ifdef NVM_USE_FLASH_PROGRAM
static u08_t nvmfile[CODESIZE] PROGMEM =
#include "nvmdefault.h"
#else
static u08_t EEPROM nvmfile[CODESIZE] =
#include "nvmdefault.h"
#endif 
Run Code Online (Sandbox Code Playgroud)

注意我没有用-DNVM_USE_FLASH_PROGRAM编译它

iab*_*der 5

如果nvmdefault.h包含一个数组初始化程序,那么这段代码应该编译得很好,如下所示:

nvmdefault.h
{0x01, 0x02, 0x03, etc...};
Run Code Online (Sandbox Code Playgroud)

至于它究竟做了什么,你必须看看源代码是否确定,但看起来它正在将该数组分配到Flash或EEPROM内存上,同样,也许有一个很好的理由来编写它,例如数组由另一个程序或脚本生成.