当我编译一个 C 文件时,其内容如下:
#include <stdio.h>
#define FILE_NAME "text\ 1"
int main()
{
FILE* file_ptr = fopen(FILE_NAME, "w");
fclose(file_ptr);
return 0;
}
得到警告:
tt.c: In function ‘main’:
tt.c:6:37: warning: unknown escape sequence: '\040'
6 | FILE* file_ptr = fopen(FILE_NAME, "w");
|
我知道它是由\
我的 C 语言代码字符串引起的,并且是SPACE 的 ASCII40
十进制。为什么警告不是?32
'\040'
'\x20'
并且似乎也在 bash\
转移到\040
种子到二进制文件(不确定)。
有规定强制吗?
更新:删除 '\32' 用于将 SPACE 的 ASCII 表示为十进制。
我如何遇到这个问题?
我只是想知道 Bash 如何处理 ESCAPED SPACE,我想 bash 将其转为 SPACE,但是在我检查了 Bash 的源代码之后(对我来说很难)。我发现 Bash 可能将\
其视为普通字符串,如下面的不涉及源代码\
:
#define slashify_in_quotes "\\`$\"\n"
#define slashify_in_here_document "\\`$"
#define shell_meta_chars "()<>;&|"
#define shell_break_chars "()<>;&| \t\n"
#define shell_quote_chars "\"`'"
所以我认为 Bash 转为\
命令或二进制文件来处理,所以我在上面写了一个简单的 C 文件来检查 C 是如何处理的\
所以我的问题是为什么'\040'
没有gcc 警告'\x20'
?
对于 Bash 的处理方式\
仍然需要我检查......