Size of character ('a') in C/C++

前端 未结 4 1240
天命终不由人
天命终不由人 2020-11-22 03:08

What is the size of character in C and C++ ? As far as I know the size of char is 1 byte in both C and C++.

In C:

#include 

        
相关标签:
4条回答
  • 2020-11-22 03:21

    As Paul stated, it's because 'a' is an int in C but a char in C++.

    I cover that specific difference between C and C++ in something I wrote a few years ago, at: http://david.tribble.com/text/cdiffs.htm

    0 讨论(0)
  • 2020-11-22 03:23

    In C the type of character literals are int and char in C++. This is in C++ required to support function overloading. See this example:

    void foo(char c)
    {
        puts("char");
    }
    void foo(int i)
    {
        puts("int");
    }
    int main()
    {
        foo('i');
        return 0;
    }
    

    Output:

    char
    
    0 讨论(0)
  • 2020-11-22 03:25

    In C, the type of a character constant like 'a' is actually an int, with size of 4 (or some other implementation-dependent value). In C++, the type is char, with size of 1. This is one of many small differences between the two languages.

    0 讨论(0)
  • 2020-11-22 03:28

    In C language, character literal is not a char type. C considers character literal as integer. So, there is no difference between sizeof('a') and sizeof(1).

    So, the sizeof character literal is equal to sizeof integer in C.

    In C++ language, character literal is type of char. The cppreference say's:

    1) narrow character literal or ordinary character literal, e.g. 'a' or '\n' or '\13'. Such literal has type char and the value equal to the representation of c-char in the execution character set. If c-char is not representable as a single byte in the execution character set, the literal has type int and implementation-defined value.

    So, in C++ character literal is a type of char. so, size of character literal in C++ is one byte.

    Alos, In your programs, you have used wrong format specifier for sizeof operator.

    C11 §7.21.6.1 (P9) :

    If a conversion specification is invalid, the behavior is undefined.275) If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.

    So, you should use %zu format specifier instead of %d, otherwise it is undefined behaviour in C.

    0 讨论(0)
提交回复
热议问题