当我编译一个 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 的处理方式\ 仍然需要我检查......