gpt4 book ai didi

我们可以用 c 将引号替换为其他字符吗?

转载 作者:行者123 更新时间:2023-11-30 19:26:50 25 4
gpt4 key购买 nike

我通过使用宏将函数名称、数字等替换为韩语来制作有点烦人的 C header 。像这样

#pragma once
#include <stdio.h>
#define 인트 int
#define 롱 long
#define 영 0
//and more and more

我想对引号做同样的事情,但它不起作用。我的代码是

#define some_korean "

当我使用此代码编译程序时,出现错误 C2001
https://learn.microsoft.com/cpp/error-messages/compiler-errors-1/compiler-error-c2001?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DKO-KR%26k%3Dk(C2001)%26rd%3Dtrue&view=vs-2019有没有办法使用宏甚至不使用宏来替换 C 中的引用标记?

最佳答案

根据 C 2018 5.1.1.2 1 中的规定,C 的翻译分 8 个阶段进行,这里进行了简化:

  1. 源文件中的字符以实现定义的方式映射到源字符集。
  2. 如果反斜杠标记连续行,则这些行会连接在一起。
  3. 源文件分为预处理标记和空白序列。
  4. 执行预处理指令。
  5. 字符常量和字符串文字中的字符将从源字符集转换为执行字符集。
  6. 相邻的字符串文字被连接起来。
  7. 预处理标记会转换为标记并进行语法和语义分析。
  8. 外部对象和函数引用已解析。

您遇到的问题主要在于第 3 阶段。宏替换不适用于文本或字符;它取代了预处理标记,而不是字符。所以你不能用引号替换“some_korean”。即使“some_korean”被识别为预处理标记,但引号不会被识别,因此它不能成为宏替换数据中的预处理标记。

此外,“some_korean”所指的字符串可能有问题。要用作宏名称,它必须是语法中的标识符。标识符是一个非数字标识符字符,后跟任意数量的非数字标识符数字字符(即“0”到“9” ”)。 非数字标识符是一个非数字(下划线,“a”到“z”,或“A”到“Z”),一个通用字符-名称(在 C 标准的附录 D 中进一步详细说明),或用于此目的的任何实现定义的字符。

韩语字符似乎包含在附件 D 中列出的 universal-character-name 值中,因此在标识符中使用它们应该没问题,除非您使用列出值之外的一些异常字符。但是,每个宏的替换文本必须包含正确的预处理器标记,其中包括整个字符串和字符常量,但不包括单个引号字符。

关于我们可以用 c 将引号替换为其他字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56524207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com