我正在重新创建一个像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
我想要一些帮助,我如何定义一个字符串,并以同样的方式打印它,我调用任何其他字符串,但使用我用BLUE
和WHITE
设置的颜色变量谢谢!
看起来您希望BLUE PWD WHITE
将字符串连接起来。这是行不通的。在编译期间将相邻的字符串字面值连接起来;"abc" "def"
将变成"abcdef"
。但是PWD
不是字符串字面值;它是getcwd((NULL), 0)
。getcwd
例程在运行时返回一个字符串。你不能那样连接它。最简单的解决方案可能是为my_putstr
编写三个单独的调用,一个用于BLUE
,一个用于PWD
,一个用于WHITE
。或者,您需要编写额外的代码来连接字符串。