我有以下代码片段,其中存储了一个宏,其中包含我正在编写的一个编辑器的配置文件路径.
#ifdef _WIN32
#define CONFIG_FILE_PATH /* windows path here */
#else
#define CONFIG_FILE_PATH "~/.stupid_editor_rc"
#endif
在Unix系统中,是否有一个相当于~
的Windows,或者是否有一种方法可以在C宏中安装一个函数来确定Windows主目录?
我有以下代码片段,其中存储了一个宏,其中包含我正在编写的一个编辑器的配置文件路径.
#ifdef _WIN32
#define CONFIG_FILE_PATH /* windows path here */
#else
#define CONFIG_FILE_PATH "~/.stupid_editor_rc"
#endif
在Unix系统中,是否有一个相当于~
的Windows,或者是否有一种方法可以在C宏中安装一个函数来确定Windows主目录?
在Unix系统中是否有一个相当于
~
的Windows,
据我所知没有.
不管怎样,这可能是个错误的问题. 您所考虑的~
的使用是shell的一个功能,而不是底层操作系统.系统本身在Unix上不像在Windows上那样执行波浪扩展.
或者,有没有一种方法可以在像这样的C宏中适合一个确定Windows主目录的函数?
假设您希望程序 Select 运行它的用户的配置文件,而不是构建它的用户,您try 的方法在Windows或Unix上都不起作用,但有其他 Select .(即使你想要构建器的配置文件,你也需要以不同的方式设置宏的值.
在Unix上,人们可能会在运行时根据环境变量HOME
的值动态地构造所需的路径. 它可以通过getenv()
函数读取,所以总体上是这样的:
const char config_name[] = ".stupid_editor_rc";
const char *home_path = getenv("HOME");
// check for and handle environment variable not defined ...
char *config_path = malloc(strlen(home_path) + sizeof config_name + 1);
// check for and handle handle allocation failure ...
sprintf(config_path, "%s/%s", home_path, config_name);
FILE *config_file = fopen(config_path);
// check for and handle fopen failure ...
free(config_path);
// ...
您应该能够通过使用适当的Windows环境变量在Windows中执行类似的操作. 没有一个精确的类似功能,但UserProfile
是相当接近的. 如果您不必处理网络共享上的主目录,那么您可能不必担心差异.
宏化以便在编译时自动 Select 适当的变量留作练习.