我想在项目中添加新的文件格式。所以我是#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
,我错过了那条信息。
答案 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)