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

时间:2013-12-26 06:45:07

标签: c printf

以下打印使用的内存百分比。

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

WIDTH被定义为等于7。

TEXT意味着什么,以及printf中定义的这种语法在哪里?

5 个答案:

答案 0 :(得分:1)

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

要查看它们的内容,只需查看预处理器输出即可。如果使用gcc:

gcc -E file.c

答案 1 :(得分:0)

TEXT()可能是一个返回字符串值的宏或函数。我认为它是用户定义的,并对该字符串进行某种格式化,该字符串作为参数传递给TEXT函数。您应该转到TEXT()的函数声明,看看它究竟是做什么的。

答案 2 :(得分:0)

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

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

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

你应该写

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

标准但不常用的东西是字段的参数宽度:例如在printf("%*i", x, y)中,第一个参数x是用于打印第二个参数{{1}的宽度}作为十进制值。

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

答案 3 :(得分:0)

_TEXT()或_T()是一个特定于Microsoft的宏。 This MSDN link says

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。 因此,每次更改字符集时都无需更改。

答案 4 :(得分:0)

TEXT()winnt.h中定义的unicode支持宏。如果定义了UNICODE,那么它会将L添加到字符串中,使其变宽。

另见TEXT vs. _TEXT vs. _T, and UNICODE vs. _UNICODE博文。