我在我的程序中多次调用CURRENT_DIR
(见下文)。就像程序运行时不可更改的可执行路径一样,每次调用此函数时都无需再次定义它。
所以,我正在寻找一个解决方案,一旦设置了这个值,就不应再设置了。
我当前的解决方案是:创建一个静态变量,将所有值设置为0,并在if语句测试中检查第一个字符是否为非null,如果为true,则设置它。但它看起来像一个不优雅的..也许有一个更好的解决方案..通过使用包括宏的一些模型,我不知道。
参见代码:
#define CURRENT_DIR ({ \
static char buffer[MAX_PATH + 1] = { 0 }; \
if(buffer[0] != '\0') \
getcurrentdir(buffer, MAX_PATH); \
buffer; \
})
答案 0 :(得分:5)
我使用的函数(如果需要,可能是inline
d)代替gcc特定的表达式语句:
const char* currentDir(void)
{
static char buffer[MAX_PATH + 1] = { 0 };
if (buffer[0] == '\0')
{
getcurrentdir(buffer, MAX_PATH);
}
return buffer;
}
这有一些优点:
MAX_PATH
和getcurrentdir
将取决于平台。)(无论如何,gcc表达式语句实现都被破坏了。static
变量不会在同一范围内的多个CURRENT_DIR
站点中重用,if
测试是向后的,所以永远不会将buffer
初始化为非空字符串。)