首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C源代码中可以(不可以)使用特殊字符吗?

在C源代码中可以(不可以)使用特殊字符吗?
EN

Stack Overflow用户
提问于 2018-06-02 06:27:27
回答 3查看 254关注 0票数 0

在C项目中,我想在函数名中使用µ字符。这是不可能的吗?我收到的错误信息如下

代码语言:javascript
复制
error: stray '\302' in program

我尝试添加以下选项:

代码语言:javascript
复制
-fexec-charset=UTF-8
-finput-charset=UTF-8

添加到我的构建脚本中,但我不能理解它们启用了什么。我正在运行这个版本的gcc:

代码语言:javascript
复制
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors 6-2017-q2-update) 6.3.1 20170620 (release) [ARM/embedded-6-branch revision 249437]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-02 06:50:03

C标准要求实现在源字符集中包含以下字符:

代码语言:javascript
复制
A-Z a-z 0-9 ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~

以及用于水平制表符、垂直制表符和换页符的字符。它还需要某种方法来指示行尾,尽管这不一定是流中字符(C 2011 N1570 5.2.1 3)。实现可以扩展此字符集,并且可以允许标识符中包含其他字符,但这些扩展是由每个实现定义的,而不是由标准定义的。

-finput-charset=…不指定要用于源字符集的字符集。It specifies what the character set of the source input is, but that input is translated to GCC’s source character set.

Clang似乎接受µ作为标识符(在macOS和Compiler Explorer上进行了测试),而GCC不接受。

票数 2
EN

Stack Overflow用户

发布于 2018-06-02 06:46:51

在大多数C语言实现中,函数名必须只包含字母数字字符和下划线。

票数 1
EN

Stack Overflow用户

发布于 2018-06-02 07:49:06

我在Mac上用两个不同的编译器尝试了这个(UTF-8编码的)程序:

代码语言:javascript
复制
#include <stdio.h>

double π = 3.141592654;

int main()
{
    printf("π = %f\n", π);
}

正如其他人所报道的那样,gcc抱怨说“程序中有一个‘\317’迷路”。但是clang接受了它并成功地编译了它;当我运行结果程序时,我得到

代码语言:javascript
复制
π = 3.141593

底线:我认为它是由实现定义的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50651709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档