【问题标题】:Is there a comprehensive list of functions affected by setlocale()? [duplicate]是否有受 setlocale() 影响的函数的完整列表? [复制]
【发布时间】:2019-12-09 14:52:15
【问题描述】:

所以我们都知道调用setlocale() 会导致许多C 运行时函数根据当前活动的语言环境改变它们的行为。例如,当使用德语语言环境时,strtod() 会突然期望用逗号将整数与数字的小数部分分开,因为这是浮点数在德语中的表示方式。

我要查找的是所有 C 运行时函数的完整列表,这些函数可能会受到对setlocale() 的调用的影响。 man pages of setlocale 提到了一些功能,但列表远未完成,例如那里根本没有提到strtod()

我为什么要寻找这样的清单?我需要将几个项目从可移植的“C”语言环境转换到系统的语言环境,并且我不想破坏任何东西,所以我需要对所有可能受语言环境更改影响的 C 运行时函数进行 grep 以适应或修复代码与任意语言环境兼容,而不仅仅是可移植的“C”语言环境。

【问题讨论】:

标签: c posix locale crt


【解决方案1】:

我认为这不存在,但 POSIX 列出了一些直接依赖于语言环境和语言环境相关变量 The Open Group Base Specifications Issue 7, 2018 edition, 7 Locale 的函数。我不认为这是详尽无遗的(我很确定它不是)。据说:

Shell 和 Utilities 卷中的标准实用程序 POSIX.1-2017 的行为应基于当前语言环境,如 在每个实用程序的 ENVIRONMENT VARIABLES 部分中定义。这 系统中定义的一些 C 语言函数的行为 POSIX.1-2017 的接口卷也应基于 语言环境选择。

这意味着(对我来说):阅读功能手册...

您在标准 C 中也有这方面的信息:7.11.1 语言环境控制

7.11.1 区域设置控制

7.11.1.1 setlocale 函数

setlocale 函数选择合适的部分 由 category 和 locale 参数指定的程序的语言环境。 setlocale 函数可用于更改或查询程序的 整个当前语言环境或其部分。值LC_ALL 为 类别命名程序的整个语言环境;其他值 类别名称只是程序语言环境的一部分。 LC_COLLATE 影响strcollstrxfrm 函数的行为。 LC_CTYPE 影响字符处理函数的行为,见 7.4)和 多字节和宽字符函数。 LC_MONETARY 影响 localeconv 函数返回的货币格式信息。 LC_NUMERIC 影响格式化的小数点字符 输入/输出函数和字符串转换函数,以及 localeconv 返回的非货币格式信息 功能。 LC_TIME 影响 strftimewcsftime 的行为 功能。

7.4 字符处理

7.4.1 字符分类函数

7.4.1.1 isalnum 函数

7.4.1.2 isalpha 函数

7.4.1.3 isblank 函数

7.4.1.4 iscntrl 函数

7.4.1.5 isdigit 函数

7.4.1.6 isgraph 函数

7.4.1.7 islower 函数

7.4.1.8 isprint 函数

7.4.1.9 ispunct 函数

7.4.1.10 isspace 函数

7.4.1.11 isupper 函数

7.4.1.12 isxdigit 函数

7.4.2 字符大小写映射函数

7.4.2.1 tolower 函数

7.4.2.2 toupper 函数

【讨论】:

  • 7.11.1末尾的前向引用可以看作是一个列表,虽然它并不具体,而是指向函数组。
  • @Lundin 是的,这就是问题所在,只是转发引用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多