1

我想在我的项目中添加一种新的文件格式。所以我正在#define寻找一种新的文件格式类型,但我也想保持对旧格式的支持。

#ifdef我的s 和s 的设置/结构是否#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

有没有更漂亮的方法来做到这一点?

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

4

2 回答 2

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

But I think that it would be better something like:

#define FILE_FORMAT 1

and

#if FILEFORMAT == 1

#elif FILEFORMAT == 2

#else

#endif
于 2013-05-22T14:58:34.260 回答
0
#ifdef FILE_FORMAT_TWO
    sprintf(xxx); 
#elif defined(NEW_FILE_FORMAT)
    sprintf(xxx); 
#else
    sprintf(xxx);
#endif

这是一个解释。C 预处理器指令允许您#ifdef用作#if defined. Gnu C 编译器的预处理器指令可以在这里找到。该文档有点长,所以与条件语法有关的部分就在这里

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

#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)

于 2013-05-22T15:00:49.390 回答