Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which header file or definitions to use for using char8_t data type in C++?

Tags:

c++

c++20

So I want to use char8_t data type in my code. But my compiler shows me that it could not find an identifier like char8_t , which probably means it could not find required header file or definitions for it.

So can anyone tell me what header files / definitions should I use to get the char8_t data type? The language is C++. I'll be thankful if you can also answer for C.

PS:<cwchar> did not work.

Edit:

My code:

#include <iostream>
#include <cwchar>
using namespace std;
int main()
{
char c='a';
wchar_t w=L'A';
char8_t c8=u8'c';
char16_t c16=u'D';
char32_t c32=U'K';

cout<<"Data Type"<<"\t"<<"Size"<<"\n"
<<"char"<<"\t \t"<<sizeof(c)<<" bytes"<<"\n"
<<"wchar_t"<<"\t \t"<<sizeof(w)<<" bytes"<<"\n"
<<"char8_t"<<"\t"<<sizeof(c8)<<"\n" 
<<"char16_t"<<"\t"<<sizeof(c16)<<" bytes"<<"\n"
<<"char32_t"<<"\t"<<sizeof(c32)<<" bytes"<<"\n";

return 0;
}

My compiler throws this error:

WideCharacters.cpp: In function 'int main()':
WideCharacters.cpp:8:5: error: 'char8_t' was not declared in this 
scope; did you mean 'wchar_t'?
8 |     char8_t c8=u8'c';
  |     ^~~~~~~
  |     wchar_t
WideCharacters.cpp:15:31: error: 'c8' was not declared in this 
scope; did you mean 'c'?
15 |     <<"char8_t"<<"\t"<<sizeof(c8)<<"\n"
  |                               ^~
  |                               c

Edit-2:

I have my C++ standard set to C++20 in VS code so there is no problem with standard.

like image 539
Zeph_The_Hungry_Loli Avatar asked Nov 03 '21 07:11

Zeph_The_Hungry_Loli


People also ask

What should header files contain in C?

A header file is a file containing C declarations and macro definitions (see Macros) to be shared between several source files. You request the use of a header file in your program by including it, with the C preprocessing directive ' #include '.

Which is correct to include header file in C program?

In C language, header files contain the set of predefined standard library functions. You request to use a header file in your program by including it with the C preprocessing directive “#include”. All the header file have a '. h' an extension.

In which header file is defined?

Advertisements. A header file is a file with extension . h which contains C function declarations and macro definitions to be shared between several source files. There are two types of header files: the files that the programmer writes and the files that comes with your compiler.

What is the use of char8_t in C++?

The /Zc:char8_t compiler option enables the char8_t type keyword as specified in the C++20 standard. It causes the compiler to generate u8 prefixed character or string literals as const char8_t or const char8_t [N] types, respectively, instead of as const char or const char [N] types.

What is a header file in C?

A header file is a file with extension.h which contains C function declarations and macro definitions to be shared between several source files. There are two types of header files: the files that the programmer writes and the files that comes with your compiler.

What is char type in C++?

The char type was the original character type in C and C++. The char type can be used to store characters from the ASCII character set or any of the ISO-8859 character sets, and individual bytes of multi-byte characters such as Shift-JIS or the UTF-8 encoding of the Unicode character set. In the Microsoft compiler, char is an 8-bit type.

Is there a UTF-8 character type for C2X?

EDIT: 2021-06-06: N2653 (char8_t: A type for UTF-8 characters and strings (Revision 1)) has been submitted for C2x. Implementations of that proposal are available for gcc here and for glibc here. Patches submitted to gcc and glibc can be found here and here respectively.


Video Answer


2 Answers

char8_t is a keyword. It's built into the language, so you don't need any headers.

If it doesn't work, either your compiler doesn't support it, or you forgot to enable C++20 support (e.g. -std=c++20 in GCC).

like image 196
HolyBlackCat Avatar answered Oct 28 '22 11:10

HolyBlackCat


The problem here is possibly the compiler is not able to identify that this is a C++20 feature.

Compile using this: g++ -Wall -std=c++20 "yourFileName".cpp

replace youFileName with that of the file name.

like image 38
Abhishek Dutt Avatar answered Oct 28 '22 13:10

Abhishek Dutt