这是一个有效的C ifdef结构吗?有没有更好的办法?

时间:2013-05-22 14:56:37

标签: c syntax

我想在项目中添加新的文件格式。所以我是#define一种新的文件格式类型,但我也希望继续支持旧格式。

#ifdef#else的设置/结构是否有意义,是否有效?我很确定它是,但我觉得没有牙套它没有意义。

// My intention
if()
   ;
else
{
    if()
        ;
    else
        ;
}

#ifdef FILE_FORMAT_TWO
    sprintf(xxx); 
#else
    #ifdef NEW_FILE_FORMAT
        sprintf(xxx); 
    #else
        sprintf(xxx);
    #endif
        sprintf(xxx);
#endif

有更好的方法吗?

编辑:我的意思是,第一部分代码是我在第二部分中对#(pound定义,ifs和elses)的意思。我不确定第二部分是否与第一部分相同。我写第二部分是因为我没有意识到使用#elif,我错过了那条信息。

2 个答案:

答案 0 :(得分:3)

#ifdef FILE_FORMAT_TWO
    sprintf(xxx); 
#else
    #ifdef NEW_FILE_FORMAT
        sprintf(xxx); 
    #else
        sprintf(xxx);
    #endif
        sprintf(xxx);     <<---- remove this
#endif

但我认为这样会更好:

#define FILE_FORMAT 1

#if FILEFORMAT == 1

#elif FILEFORMAT == 2

#else

#endif

答案 1 :(得分:0)

#ifdef FILE_FORMAT_TWO
    sprintf(xxx); 
#elif defined(NEW_FILE_FORMAT)
    sprintf(xxx); 
#else
    sprintf(xxx);
#endif

这是一个解释。 C预处理器指令允许您使用#ifdef作为#if defined的缩写形式。可以找到Gnu C编译器的预处理器指令here。该文档有点长,因此与条件语法相关的部分位于here

总的来说,我发现在我的预处理指令中明确表示更清晰,如下:

#if defined(FILE_FORMAT_TWO)
    sprintf(xxx); 
#elif defined(NEW_FILE_FORMAT)
    sprintf(xxx); 
#elif defined(DEFAULT_FILE_FORMAT)
    sprintf(xxx);
#else
#error "You must define blah blah"
#endif

致Jonathan Leffler指出#ifdef FILE_FORMAT_TWO中的风格不一致并建议替换为#if defined (FILE_FORMAT_TWO)