gcc检查文件是否为main(#if __BASE_FILE__ == __FILE__)

Mar*_*ski 2 c macros gcc

在ruby中,有一个非常常见的习惯用法来检查当前文件是否为"main"文件:

  if __FILE__ == $0
    # do something here (usually run unit tests)
  end
Run Code Online (Sandbox Code Playgroud)

我想在阅读gcc文档之后在C中做类似的事情我认为它应该像这样工作:

  #if __FILE__ == __BASE_FILE__
    // Do stuff
  #endif
Run Code Online (Sandbox Code Playgroud)

唯一的问题是在我尝试这个之后:

$ gcc src/bitmap_index.c -std=c99 -lm && ./a.out 
src/bitmap_index.c:173:1: error: token ""src/bitmap_index.c"" is not valid in preprocessor expressions
Run Code Online (Sandbox Code Playgroud)

我使用#if错了吗?

作为未来客人的总结:

  • 您无法使用#if比较字符串
  • BASE_FILE是正在编译的文件的名称(实际上就是我想要的).
  • 最好的方法是在编译期间使用-D设置标志

小智 6

在gcc中你可以使用:

#if __INCLUDE_LEVEL__ == 0

要么:

如果(!__ INCLUDE_LEVEL__)

检查你的内部__BASE_FILE__