文件夹分隔符窗口和unix的ANSI C定义

时间:2015-08-29 19:52:47

标签: c windows unix c-preprocessor portability

我正在为unix和windows编写程序,我需要像这样定义文件夹分隔符:#define FOLDER_SEPARATOR "/",我需要在编译时理解,哪个系统正在工作,我怎么能理解这个? 我需要这样的东西:

 #if defdefine WINDOWS
 #define FOLDER_SEPARATOR "\"
 #elif defined UNIX
 #define FOLDER_SEPARATOR "/"
 #endif

告诉我, C 语言中有类似内容,现在我在gcc下编写并使用普通的Makefile,但我需要一些跨平台的东西。

1 个答案:

答案 0 :(得分:2)

宏本身不可用,但有一些有用的预处理器符号:

 #ifdef _WIN32    //Always defined also on X64 OS
 #define FOLDER_SEPARATOR "\\"
 #elif defined (__linux__)  //Normally defined by linux systems  
 #define FOLDER_SEPARATOR "/"
 #else
 #error Unknown system!
 #endif

这是定义一个值的常用方法,该值可以在编译时连接到C中的字符串。如果你有:

sprintf(fullpath, "C:" FOLDER_SEPARATOR "%s" FOLDER_SEPARATOR "%s", path, file);

C编译器将创建单个格式字符串:

"C:\%s\%s"  //single backslash because it is already in string