繁体   English   中英

格式字符串周围的“ TEXT”在“ printf”中是什么意思

[英]what does the `TEXT` around the format string mean in “printf”

下面显示了已用内存的百分比。

  printf (TEXT("There is  %*ld percent of memory in use.\n"),
            WIDTH, statex.dwMemoryLoad);

WIDTH定义为等于7。

TEXT是什么意思,printf中定义的这种语法在哪里?

正如其他人已经说过的, TEXT可能是一个宏。

要查看它们变成了什么,只需查看预处理器输出。 如果正在使用gcc:

gcc -E file.c

TEXT()可能是返回字符串值的宏或函数。 认为它是用户定义的,并且对作为参数传递给TEXT函数的字符串进行某种格式化。 您应该转到TEXT()的函数声明,以了解其确切功能。

只是猜测,但是TEXTchar*char*函数,它负责翻译文本字符串以提供国际化支持。

请注意,如果是这种情况,那么您还必须始终将TEXT与字符串文字(而不是表达式或变量)一起使用,以允许外部工具通过对源代码的简单扫描来检测所有需要翻译的文字。 例如,也许你永远不应该写:

puts(TEXT(flag ? "Yes" : "No"));

而你应该写

puts(flag ? TEXT("Yes") : TEXT("No"));

取而代之的是标准但很少使用的是字段的参数宽度:例如,在printf("%*i", x, y) ,第一个参数x是用于将第二个参数y打印为小数的宽度值。

当与scanf使用时, *特殊字符可用于指定您不想存储该字段(即“跳过”它而不是读取它)。

_TEXT()或_T()是Microsoft特定的宏。 这个MSDN链接说

To simplify code development for various international markets,  
the Microsoft run-time library provides Microsoft-specific "generic-text" mappings for many data types,  routines, and other objects.  
These mappings are defined in TCHAR.H.  
You can use these name mappings to write generic code that can be compiled for any of the three kinds of character sets:  
ASCII (SBCS), MBCS, or Unicode, depending on a manifest constant you define using a #define statement.  
Generic-text mappings are Microsoft extensions that are not ANSI compatible.  

_TEXT是使字符串“字符集中性”的宏。 例如_T(“ HELLO”);

字符可以用8位ANSI标准或16位Unicode表示法表示。

如果为所有字符串定义_TEXT并定义预处理程序符号“ _UNICODE”,则所有此类字符串将遵循UNICODE编码。 如果不定义_UNICODE,则所有字符串均为ANSI。 因此,宏_TEXT允许您将所有字符串都设置为UNICODE或ANSI。 因此,无需在每次更改字符集时都进行更改。

TEXT()winnt.h定义的Unicode支持宏。 如果定义了UNICODE ,则它将L附加在字符串之前,使其变宽。

另请参见TEXT vs. _TEXT vs. _T,以及UNICODE vs. _UNICODE博客文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM