如何将C程序的语言环境设置为;";场所
C程序启动时会继承其语言环境变量。这是自动发生的。但是,这些变量不会自动控制库函数使用的区域设置,因为ANSI C表示所有程序默认在标准如何将C程序的语言环境设置为;";场所,c,linux,C,Linux,C程序启动时会继承其语言环境变量。这是自动发生的。但是,这些变量不会自动控制库函数使用的区域设置,因为ANSI C表示所有程序默认在标准“C”区域设置中启动 我有,所以C程序在启动时必须这样做: setlocale(LC_ALL, "C"); 但是这行代码是如何在C程序中结束的呢?编译器是否为我添加了它?这是特定于平台的。在GNU/Linux系统上,语言环境由glibc管理,glibc将设置存储在全局变量\u nl\u global\u locale中。要满足默认设置的要求,只需: 实际上不需
“C”
区域设置中启动
我有,所以C程序在启动时必须这样做:
setlocale(LC_ALL, "C");
但是这行代码是如何在C程序中结束的呢?编译器是否为我添加了它?这是特定于平台的。在GNU/Linux系统上,语言环境由glibc管理,glibc将设置存储在全局变量
\u nl\u global\u locale
中。要满足默认设置的要求,只需:
实际上不需要调用
setlocale(LC_ALL,“C”)因为所有设置都已通过此初始化指向C语言环境。编译器不会修改源代码并向主程序添加对setlocale()
的显式调用。相反,需要实现(编译器和库的组合)来确保程序的行为“就像”在开始时调用了setlocale()
程序行为的许多其他方面的实现也必须确保正常工作。例如,它必须确保正确设置了stdin
、stdout
和stderr
——您不必在main()
程序中显式打开这些流,因为库确保在调用main()
之前设置它们。在POSIX系统上,启动代码确保适当设置了environ
全局变量。您可以在的POSIX规范中看到很多相关信息,包括:
对于新的过程映像,等效于:
setlocale(LC_ALL, "C")
应在启动时执行
C标准也说了同样的话:
在程序启动时,相当于
setlocale(LC_ALL, "C");
被执行
任何特定实现如何实现效果的细节本质上是特定于实现的,但通常是通过使用适当的正确值初始化选定的全局变量来实现的。标准没有说明实施必须如何达到效果;它只是说它必须实现它。它发生在程序启动期间。编译器发出代码,或者在启动过程中调用了库中的代码。我将“default”理解为“在没有调用setlocale
”这不取决于实现吗?库需要设置区域设置,就好像它包含该行一样,就像需要确保stdin
一样,stdout
和stderr
已正确初始化,就好像通过适当调用fopen()
一样。您可以通过添加setlocale(LC_ALL,”)来设置实现定义的替代语言环境代码>到程序的开始。C标准未规定任何其他值,属于“实现定义的行为”类别。
setlocale(LC_ALL, "C");