61阅读

c语言的含义-C++ - ,T含义 C++语言中“

发布时间:2018-03-16 所属栏目:富含维生素c的蔬菜

一 : C++ - ,T含义 C++语言中“

_T("Hello")是一个宏,他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。
Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。
如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。

_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。

---------------------------------------------------------------------------------------------------------------

1C++语言中“_T”是什么意思?

Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。

如果将来你不打算升级到unicode,那么也不需要_T,

---------------------------------------------------------

_t("hello world")
在ansi的环境下,它是ansi的,如果在unicode下,那么它将自动解释为双字节字符串,既unicode编码。
这样做的好处,不管是ansi环境,还是unicode环境,都适用。

2请问在vc++中的字符串_T("ABC")和一个普通的字符串“ABC”有什么区别。

_T("ABC")
表示如果定义了unicode
它表示 L"ABC",每个字符为16位,宽字符字符串
---------------------------------------------------------
if not UNICODE
它就是ascii的"ABC",每个字符为8位
"ABC"就是指ascii字符串"ABC"

----------------------------------------------------------

相当于
#ifdef _UNICODE
#define _T("ABC") L"ABC"
#else
#define _T("ABC") "ABC"
#endif

----------------------------------------------------------

_T("ABC")中的一个字符和汉字一样,占两个字节,而在"ABC"中,英文字符占一个字节,汉字占两个字节

---------------------------------------------------------------------------------------------------------------

_T在tchar.h头文件中定义了:

#define __T(x) L ## x

#define _T(x) __T(x)

-- ##在宏里面相当于连接符,把前后两个字符串连在一起作为一个字符串。

以下来自网络:
#define Conn(x,y) x##y
#define ToChar(x)#@x
#define ToString(x) #x

x##y表示什么?表示x连接y,举例说:
int n = Conn(123,456); 结果就是n=123456;
char* str = Conn("asdf", "adf")结果就是 str = "asdfadf";
怎么样,很神奇吧

再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举例说:
char a = ToChar(1);结果就是a='1';
做个越界试验char a = ToChar(123);结果是a='3';
但是如果你的参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant :P

最后看看#x,估计你也明白了,他是给x加双引号
char* str = ToString(123132);就成了str="123132";

先说宽字符常量,它是用来支持某些语言的字符集合,如汉语、日语,这些语言中的某些字符不能用单个字符表示。于是想对应的就有了宽字符串咯!

L -> Long 对于宽字符傅值是L字符串 2个字节存储
因为ASCII是完全的美国标准无法有效表示其他国家语言符号
后来引入了活动页影射效果不甚理想
最后决定2字节宽字符编码 65535个字符足于应付世界上各个国家的语言
中日韩字符集好像被编在 0X4FFF -- 0X9FFF 之间

二 : LC_ALL=C的含义

LC_ALL=C的含义 (2011-05-09 16:26)

分类: OS

在很多的shell脚本中,我们经常会看见某一句命令的前面有一句“LC_ALL=C”

SAR_CMD="LC_ALL=C sar -u -b 1 5 | grep -i average "

这到底是什么意思?

LC_ALL=C 是为了去除所有本地化的设置,让命令能正确执行。

---------------------------------

转帖:

在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。在locale环境中,有一组变量,代表国际化环境中的不同设置:1. LC_COLLATE

定义该环境的排序和比较规则

2. LC_CTYPE

用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。

3. LC_MONETARY

货币格式

4. LC_NUMERIC

非货币的数字显示格式

5. LC_TIME

时间和日期格式

6. LC_MESSAGES

提示信息的语言。另外还有一个LANGUAGE参数,它与LC_MESSAGES相似,但如果该参数一旦设置,则LC_MESSAGES参数就会失效。LANGUAGE参数可同时设置多种语言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。

7. LANG

LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。类似于 LC_ALL。

8. LC_ALL

它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值。注意,LANG的值不受该宏影响。

C"是系统默认的locale,"POSIX"是"C"的别名。所以当我们新安装完一个系统时,默认的locale就是C或POSIX。

"POSIX" :Specifies the minimal environment for C-language translation called the POSIX locale. If setlocale() is not invoked, the POSIX locale is the default

"C" Equivalent to "POSIX".

-----------------------------------

How to view the current locale setting?

# locale

How to change the locale setting?

* Via the CDE login locale

* As a user-specific locale

* As a system default locale

To change the current locale setting, first confirm that the desired locale is

installed on the system with:

# locale -a

de

en_AU

en_CA

en_UK

C

If the desired locale is not in the list, you will need to install the

appropriate packages for that locale. See the Note below for more information

about locale packages.

How to change the locale via the CDE login locale?

On the CDE login banner:

Choose options - languages

Under languages - choose the new locale

The CDE banner will re-cycle and then you can login to the selected locale.

NOTE: If a user has a different default locale set in their environment, the

that locale setting will override the selected CDE login locale.

How to set a user-specific locale?

Note:

For sh, ksh:

# LANG=C; export LANG

# LC_ALL=C; export LC_ALL

For csh:

# setenv LANG C

# setenv LC_ALL C

Note: To set a default locale for a user's environment, set the LANG or LC_*

variables in a user's shell intialization file such as $HOME/.profile or

$HOME/.cshrc

How to change the locale by setting the system default locale?LANG=CLC_ALL=CExample from the /etc/default/init file:# Lines of this file should be of the form VAR=value, where VAR is one of# TZ, LANG, or any of the LC_* environment variables.LANG=CLC_ALL=CNote: The system must be rebooted after making changes to the/etc/default/init file in order for the changes to take effect.How to verify the locale setting?After setting or changing the locale, verify that the locale is set correctly:Check if the locale is set correctly by running the locale command without anyoptions:# localeLANG=CLC_CTYPE= "C"LC_NUMERIC= "C"LC_TIME= "C"LC_COLLATE= "C"LC_MONETARY= "C"LC_MESSAGES= "C"LC_ALL=C

三 : C里面的#pragmaweak的含义

#pragma weakto define a weakglobalsymbol. This pragma is used mainly in source files for buildinglibraries. The linker does not produce an error if it is unable toresolve a weaksymbol.

#pragma weak function_name
defines function_name to be a weaksymbol. The linker does not complain if it does not find adefinition for function_name.

#pragma weak function_name1 = function_name2
defines function_name1 to be a weaksymbol, which is an alias for the symbolfunction_name2. You must declarefunction_name1 and function_name2before using them in the pragma. For example:

extern void bar(int)
extern void _bar(int)
#pragma weak _bar=bar
If your program calls but does not definefunction_name1, the linker uses the definition fromthe library. However, if your program defines its own version offunction_name1, then the program definition is usedand the weakglobal definition of function_name1 in the library isnot used. If the program directly callsfunction_name2, the definition from the library isused; a duplicate definition of function_name2 causesan error.
本文标题:c语言的含义-C++ - ,T含义 C++语言中“
本文地址: http://www.61k.com/1151183.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1