LINUX.ORG.RU

прога на си непонятки


0

0

Маленько изучаю си, для интереса вот код програмки из книжки
1/* простые арифметические действия */
2#include <stdio.h>
3main(){
4int fst = 2, scnd = 3;
5int df,prd,qt,rm;
6df = fst - scnd;
7prd = fst * scnd;
8qt = fst / scnd;
9fst = 123;
10scnd = 17;
11rm = fst % scnd;
12/* rm - остаток от деления fst на scnd */
13printf("%d %d %d %d\n",df,prd,qt,rm);
14}

Почему в 4 строке объявлются 2переменные и сразу присваевается значение?  Можна было объявить все переменные в 5 строке и в другой строке присвоить им значение? Или это чтоб короче было?

И еще как понять узнать сколько бит в переменной типа int?    
★★★

> Можна было объявить все переменные в 5 строке и в другой строке присвоить им значение? Или это чтоб короче было?

да

> И еще как понять узнать сколько бит в переменной типа int?

sizeof(int) * CHAR_BITS

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Все же CHAR_BIT, а не CHAR_BITS.

2Dieter:
Что бы использовать CHAR_BIT добавь в программу #include <limits.h>
Ну уже есть готовый макрос _TYPEBITS(type), который определен в <values.h>

eXire ★★
()

>>Почему в 4 строке объявлются 2переменные и сразу присваевается значение?

можно, у каждого свой стиль

>>И еще как понять узнать сколько бит в переменной типа int?

не вникая - оператор sizeof(int), для юникс систем это число равно 1, для виндусов - 4

anonymous
()
Ответ на: комментарий от anonymous

> не вникая - оператор sizeof(int), для юникс систем это число равно 1, для виндусов - 4

Да что вы говорите?

$ cat test.cpp
#include <stdio.h>
int main(int argc, char **argv) {
        printf("out: %d\n", sizeof(int));
        return 0;
}

$ ./a.out
out: 4

$ uname -a
Linux Toshiba906 2.6.22-gentoo-r2 #42 SMP PREEMPT Wed Sep 19 16:31:26 EEST 2007 i686 Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz GenuineIntel GNU/Linux

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

в DOS'е sizeof(int) = 2. в защищенном режиме - 4 (собсно все современные оси на IBM PC compat. работают в защищенном режиме - соотв-но, что линуха, что винда, что фря... у всех int - 4 байта).

Deleted
()
Ответ на: комментарий от Deleted

> в DOS'е sizeof(int) = 2. в защищенном режиме - 4 (собсно все современные оси на IBM PC compat. работают в защищенном режиме - соотв-но, что линуха, что винда, что фря... у всех int - 4 байта).

ЕМНИП, для x86-64 существует какая-то операционка, которая ILP64. Т.е. в ней sozeof(int) == sizeof(long) == sizeof(void *) == 8. Хотя может, я и неправильно помню.

anonymous
()
Ответ на: комментарий от anonymous

>Или это чтоб короче было?

Не только. Если сразу при объявлении переменной не присвоить значение, переменная останется неинициализированной - там будет мусор. Если откладывать инициализацию на потом, можно просто облажаться и забыть это сделать - в итоге в какой-нибудь из ветвей if-а вылезет грязный баг.

jek_
()
Ответ на: комментарий от jek_

>Если сразу при объявлении переменной не присвоить значение, переменная останется неинициализированной

Это верно только для локальных переменных. Глобальные и статические инициализируются нулем.

eXire ★★
()
Ответ на: комментарий от theos

Блин, модель данных зависит не от ОС, а от компилятора. И в винде для майкрософтного компилятора по умолчанию модель данных LLP64 (где 8-и байтные только указатели и long long, поэтому не работает старый код, где значение указателей присваивается переменным типа long), а в линуксе для GCC модель LP64 (где также 8-и байтные long, поэтому нельзя присваивать переменной типа int (4-х байтовой) значение переменной типа long).

anonymfus ★★★★
()
Ответ на: комментарий от anonymous

>>не вникая - оператор sizeof(int), для юникс систем это число равно 1, для виндусов - 4

ну ты и выдал :D

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.