C语言 如何以正确的方式定义字符串?



我正在重新创建一个像shell一样的基本bash,我使用getcwd来确定我当前所处的路径,以便以一种很好的方式打印它。

我有这个在我的头文件:

#define BLUE "e[1;36m"
#define WHITE "e[0;00m"
#define PWD getcwd((NULL), 0)
#define PROMPT BLUE PWD WHITE

然后,我尝试使用putstr打印PROMPT,但当我编译时,我得到这个错误:

cc -g3   -c -o src/minishell.o src/minishell.c
In file included from src/minishell.c:9:
src/minishell.c: In function ‘minishell’:
src/../include/minishell2.h:14:13: error: expected ‘)’ before ‘getcwd’
14 | #define PWD getcwd((NULL), 0)
|             ^~~~~~
src/../include/minishell2.h:15:21: note: in expansion of macro ‘PWD’
15 | #define PROMPT BLUE PWD WHITE
|                     ^~~
src/minishell.c:36:15: note: in expansion of macro ‘PROMPT’
36 |     my_putstr(PROMPT);
|               ^~~~~~
src/minishell.c:36:14: note: to match this ‘(’
36 |     my_putstr(PROMPT);
|              ^
make: *** [<builtin>: src/minishell.o] Error 1

我想要一些帮助,我如何定义一个字符串,并以同样的方式打印它,我调用任何其他字符串,但使用我用BLUEWHITE设置的颜色变量谢谢!

看起来您希望BLUE PWD WHITE将字符串连接起来。这是行不通的。在编译期间将相邻的字符串字面值连接起来;"abc" "def"将变成"abcdef"。但是PWD不是字符串字面值;它是getcwd((NULL), 0)getcwd例程在运行时返回一个字符串。你不能那样连接它。最简单的解决方案可能是为my_putstr编写三个单独的调用,一个用于BLUE,一个用于PWD,一个用于WHITE。或者,您需要编写额外的代码来连接字符串。

最新更新