Przykładowy ogólny program tekstowy
Specyficzne dla firmy Microsoft
Poniższy program, GENTEXT. C, zawiera bardziej szczegółową ilustrację użycia mapowań tekstu ogólnego zdefiniowanego w TCHAR. H:
// GENTEXT.C
// use of generic-text mappings defined in TCHAR.H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
#include <errno.h>
#include <tchar.h>
int __cdecl _tmain(int argc, _TCHAR **argv, _TCHAR **envp)
{
_TCHAR buff[_MAX_PATH];
_TCHAR *str = _T("Astring");
char *amsg = "Reversed";
wchar_t *wmsg = L"Is";
#ifdef _UNICODE
printf("Unicode version\n");
#else /* _UNICODE */
#ifdef _MBCS
printf("MBCS version\n");
#else
printf("SBCS version\n");
#endif
#endif /* _UNICODE */
if (_tgetcwd(buff, _MAX_PATH) == NULL)
printf("Can't Get Current Directory - errno=%d\n", errno);
else
_tprintf(_T("Current Directory is '%s'\n"), buff);
_tprintf(_T("'%s' %hs %ls:\n"), str, amsg, wmsg);
_tprintf(_T("'%s'\n"), _tcsrev(_tcsdup(str)));
return 0;
}
Jeśli _MBCS
została zdefiniowana, GENTEXT. Język C mapuje na następujący program MBCS:
// crt_mbcsgtxt.c
/*
* Use of generic-text mappings defined in TCHAR.H
* Generic-Text-Mapping example program
* MBCS version of GENTEXT.C
*/
#include <stdio.h>
#include <stdlib.h>
#include <mbstring.h>
#include <direct.h>
int __cdecl main(int argc, char **argv, char **envp)
{
char buff[_MAX_PATH];
char *str = "Astring";
char *amsg = "Reversed";
wchar_t *wmsg = L"Is";
printf("MBCS version\n");
if (_getcwd(buff, _MAX_PATH) == NULL) {
printf("Can't Get Current Directory - errno=%d\n", errno);
}
else {
printf("Current Directory is '%s'\n", buff);
}
printf("'%s' %hs %ls:\n", str, amsg, wmsg);
printf("'%s'\n", _mbsrev(_mbsdup((unsigned char*) str)));
return 0;
}
Jeśli _UNICODE
została zdefiniowana, GENTEXT. Język C mapuje na następującą wersję programu Unicode. Aby uzyskać więcej informacji na temat używania wmain
w programach Unicode jako zamiennik dla main
programu , zobacz Using in C Language Reference (Używanie wmain
w dokumentacji języka C).
// crt_unicgtxt.c
/*
* Use of generic-text mappings defined in TCHAR.H
* Generic-Text-Mapping example program
* Unicode version of GENTEXT.C
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
int __cdecl wmain(int argc, wchar_t **argv, wchar_t **envp)
{
wchar_t buff[_MAX_PATH];
wchar_t *str = L"Astring";
char *amsg = "Reversed";
wchar_t *wmsg = L"Is";
printf("Unicode version\n");
if (_wgetcwd(buff, _MAX_PATH) == NULL) {
printf("Can't Get Current Directory - errno=%d\n", errno);
}
else {
wprintf(L"Current Directory is '%s'\n", buff);
}
wprintf(L"'%s' %hs %ls:\n", str, amsg, wmsg);
wprintf(L"'%s'\n", wcsrev(wcsdup(str)));
return 0;
}
Jeśli _MBCS
zdefiniowano metodę _UNICODE
GENTEXT lub nie została ona zdefiniowana. Język C jest mapowany na kod ASCII z jednym bajtem w następujący sposób:
// crt_sbcsgtxt.c
/*
* Use of generic-text mappings defined in TCHAR.H
* Generic-Text-Mapping example program
* Single-byte (SBCS) Ascii version of GENTEXT.C
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
int __cdecl main(int argc, char **argv, char **envp)
{
char buff[_MAX_PATH];
char *str = "Astring";
char *amsg = "Reversed";
wchar_t *wmsg = L"Is";
printf("SBCS version\n");
if (_getcwd(buff, _MAX_PATH) == NULL) {
printf("Can't Get Current Directory - errno=%d\n", errno);
}
else {
printf("Current Directory is '%s'\n", buff);
}
printf("'%s' %hs %ls:\n", str, amsg, wmsg);
printf("'%s'\n", strrev(strdup(str)));
return 0;
}
END Microsoft Specific
Zobacz też
Mapowania tekstu ogólnego
Mapowania typów danych
Mapowania zmiennych stałych i globalnych
Mapowania rutynowe
Korzystanie z mapowań tekstu ogólnego