DEV Community

Cover image for Data Types, Variables and Constants in C++

Data Types, Variables and Constants in C++

Fatih Küçükkarakurt on December 22, 2021

We continue our C++ tutorial series. If you haven't read the introduction, click the link below. C++ For Beginners All variables to be used in...
Collapse
 
pauljlucas profile image
Paul J. Lucas

The and data types occupy 4 bytes of memory, and the data types occupy 2 bytes.

No. The standard guarantees only minimum sizes. It also only says that sizeof(short) <= sizeof(int) <= sizeof(long). You also left out long long.

They are used to define decimal numbers

No. They're used to defined floating point numbers. A "decimal number" is a representation of a number in base 10.

They are used to identify an alphabetic character or strings of characters

No. char is used to define only a single character. A "string of characters" is represented by an array of char. You also left out wchar_t.

Each character occupies 1 byte of memory.

No. By definition, sizeof(char) is always 1, but that number has nothing to do with how many physical bytes of memory it occupies.

char letter = "f";

This is wrong. It needs to be 'f' in single quotes in order to be a char.

C++-specific keywords cannot be used in variable names.

No. They can't be used as names of anything (not only variables). However, they can be used in variable names, e.g., character is a perfectly valid name even though char is in character.

[Global] variables must be placed outside of the { } signs that specify function boundaries.

No. This is still a global variable, yet it is inside {}:

namespace { int x; }
Enter fullscreen mode Exit fullscreen mode

I would suggest that you don't use {} as part of your explanation.

The compiler treats all these characters as a string and puts them together by adding the '/0' character to the end.

No. It's \0.

Collapse
 
fkkarakurt profile image
Fatih Küçükkarakurt

First of all, thank you for your comment.

1- In your first comment, you commented "No" to the subject you mentioned. What is wrong, I do not understand. Doesn't int and long take up 4 bytes and short 2 bytes? We can even say 8 bytes for long. 4 Byte was for 32-bit operating systems. You also mentioned the long long structure. Here I am preparing a beginner level article. How many times do we use 64 bytes of data at the beginner level?

2- In your second comment, you mentioned decimals. No, your answer is quite ironic. Isn't every number we use used in modular arithmetic 10? Decimal numbers actually mean base 10 numbers anyway.

3- Let's come to your third comment. char is not used for just a single letter. Haven't you seen a usage like char str[4] = "C++" before? So when using char, we can also use character strings.

4- In your fourth comment, we are actually talking about the same thing. Each character of the number you entered will occupy a certain amount of memory. But each unit actually occupies 1 byte of space.

5- You're right about the double quotes here. Habit from different software languages. Let's also tell our friends here that single quotes should be used in single characters. I'm editing this part and thank you for your attention.

6- When writing character, you are not using char anyway. What we're talking about here is just using 'char' or not. To give an example from daily life, there is quite a big difference between the number 10 and the number 1050. We are not breaking the rule just because we used 10 when writing 1050.

7-

#include  <iostream>
using  namespace std;
// Global variable declaration:
int g;  
int main ()  { //I'm talking about the {} signs here
    // Local variable declaration:  
    int a, b; 
    a =  10; 
    b =  20; 
    g = a + b; 
    cout << g;  
    return  0;
}
Enter fullscreen mode Exit fullscreen mode

Also aren't you going to write any function inside the namespace? As I stated in the text, I am describing the area outside the {} signs of the Function.

8- Yes /0 is an incorrect usage. My fault. Thank you. I am editing.

Collapse
 
pauljlucas profile image
Paul J. Lucas

Doesn't int and long take up 4 bytes and short 2 bytes?

No. See here and the sentence that begins with "Besides the minimal bit counts, the C++ Standard guarantees that ...."

Isn't every number we use used in modular arithmetic 10?

No. I can use any base I like. C++ directly supports octal (base 8) and hexadecimal (base 16) also.

Decimal numbers actually mean base 10 numbers anyway.

Yes, I know; but that has nothing to do with floating point numbers.

char is not used for just a single letter.

Yes, it is.

Haven't you seen a usage like char str[4] = "C++" before?

Yes, and that is not a char. That's an array of char. They are not the same thing.

But each unit actually occupies 1 byte of space.

Your original comment is true only if you restrict your character set to an 7 or 8 bit character set, such as ASCII or EBCIDIC. Other character sets such as Unicode when represented as UTF-16 occupies 2 bytes per character, UTF-32 occupies 4 bytes per character, or UTF-8 occupies 1-to-4 bytes per character. You can't really get away with ignoring Unicode these days.

Thread Thread
 
fkkarakurt profile image
Fatih Küçükkarakurt

No. See here and the sentence that begins with "Besides the minimal bit counts, the C++ Standard guarantees that ...."

The guarantee does not mean that they do not take up 4 and 2 bytes of space. There is nothing wrong with my sentence.

No. I can use any base I like. C++ directly supports octal (base 8) and hexadecimal (base 16) also.

Of course, you can use whatever base you want. But the base we use by default is 10. I did not say that C++ does not support other bases. You can easily do simple modular arithmetic in almost any language. So, in fact, there is nothing wrong with this sentence.

Yes, I know; but that has nothing to do with floating point numbers.

Don't we define decimals with floats? Now that I've said that, you're going to say, "No, I can use a double". Please see this answer by Duthomhas in 2010. I'm sure you and I are talking about the same thing.

Yes, and that is not a char. That's an array of char. They are not the same thing.

This does not indicate that it is not a char. String, letter, word etc. inside char. We can fit a lot of things. It should not be thought of as it is written in the books.

Your original comment is true only if you restrict your character set to an 7 or 8 bit character set, such as ASCII or EBCIDIC. Other character sets such as Unicode when represented as UTF-16 occupies 2 bytes per character, UTF-32 occupies 4 bytes per character, or UTF-8 occupies 1-to-4 bytes per character. You can't really get away with ignoring Unicode these days.

You know that being able to generalize and explain things in the simplest way in science and software is a very, very difficult task. If we try to explain all these details and exceptions, it would take a few months to write an article, right? After all, we are talking about languages like C/C++. It's very nice of you to add to the comments and point out some typos. Thank you for this. But you shouldn't call false statements all of them. Because it's true. By saying that you are wrong, you are trying to express that what I wrote is completely wrong and false. I guess it's a software developer disease. "Oh wait, there is actually a situation like this and this expression can also be used like this." I would be much happier if you left a comment like this. Style is an important thing.

But thank you very much for your interest and attitude. We have a lot to learn from you. After all, you are more experienced.

Thread Thread
 
fkkarakurt profile image
Fatih Küçükkarakurt

Also yes I have read them all and I want to say "purple" to you. 😄

Thread Thread
 
pauljlucas profile image
Paul J. Lucas

The guarantee does not mean that they do not take up 4 and 2 bytes of space.

On your particular machine, they take up that amount of space. That is not universally true.

There is nothing wrong with my sentence.

It's simply not true and repeatedly saying it is doesn't make it so.

Don't we define decimals with floats?

No, you define floating-point numbers with float, double, or long double. You are still confusing the concepts of "bases" with "integer" vs "floating-point." "Floading-point" is its own concept. Your original section title was "Decimal constants"; it should have been "Floating-point constants." This:

int x = 42; // This is also a decimal!
Enter fullscreen mode Exit fullscreen mode

is decimal number. Just because it also happens to have no fractional part doesn't make it not a decimal.

This does not indicate that it is not a char.

Types and arrays of types simply aren't the same thing. Again, repeating otherwise doesn't make it true.

You know that being able to generalize and explain things in the simplest way in science and software is a very, very difficult task.

Yes, but that doesn't mean you state things as fact when they're not. If you initially want to make a simplified statement, you put something like either a parenthetical comment or footnote that explains that it's not strictly true following by a "more later" where you will eventually explain the details. For example, you wrote:

Each character occupies 1 byte of memory.

I would have written:

C++ inherits its primitive types from C. Back when C was invented in 1978, characters (individual letters, numbers, or symbols) were very western-alphabet-centric and so the char type (inherited from C) is only big enough to store a single character from a western alphabet. Today with software being used all over the world by many people who don't use western alphabets, char is woefully inadequate; but for now, we'll make the simplifying assumption that it stores a single character.