Форум программистов, компьютерный форум CyberForum.ru

12 в опросов по C /C++. part3 - C++

Восстановить пароль Регистрация
 
csrnsdrfg1
4 / 4 / 0
Регистрация: 30.03.2012
Сообщений: 34
30.06.2012, 00:42     12 в опросов по C /C++. part3 #1
всем привет. Помогите пожалуйста с вопросами. Во время работы возникало много моментов, которые не описаны в книге или описаны вскользь (в большинстве случаев это какие-то частные случаи).
Использую компил Codeblocks 10.05

1)
C++
1
2
3
4
5
6
int main ()
{
int main;
main ();
return 0;
}
Сообщение компилятора: 'main' cannot be used as a function.

Но я ведь сначала объявил ф-ию, а уже потом созвучную переменную. Почему не высветилось сообщение о конфликте имен или что-то вроде этого, а то получается, будто бы ф-ии main () вообще нет.

2) cout << 100000000000009; Компил сам определил, что для данной константы следует
выделить не стандартный int (ведь число написалось без ошибки), а long? Просто, я ведь не указал в конце L /l;

3) У меня sizeof (long double) = 12 б. Передо мной стоит задача, присвоить переменой
типа long double максимальное значение long double с помощью константного выражения. Никаких суффиксов для константных выражений, которые превышает размер double не существует. Как все-таки решить эту задачу (именно с помощью константного выражения)?

Просто в учебнике сказано про привидение типов операндов (ну типо, если один int, другой double, то оба приводятся к двойному и т.д.) а про константные выражения размывчато...

4) cout.put ('\v');
Вместо вертикальной табуляции получаю какой-то символ. С чем это может быть связано?
5) for (unsigned wchar_t i = 0; i < 65536; i++) wcout << i;
После (примерно) 100 - 120 символов ничего не печатается (не табуляция, не пробел, а вообще ничего). С чем это может быть связано?

6) Как размещается в памяти константа, если она превышает размер стандартных типов данных?
Напр: +163e+52700

Или может берется максимальный тип, а затем (в случае превышения и максимального) начинается циклическое вращение чила (обычное переполнение)?

7) при инициализации переменных вместо правой части подсталяется ее адрес?
Напр.:
char arr [] = {'a', true, 3};
char arr [] = "qwerty";

Иными словами, в чем различие между первой и второй записью? Да, выполняется одно и тоже, но, м.б. процессы хоть на каком-то этапе отличаются? Я не знаю ассемблер, но эти записи транслируются точь в точь одинаково?

8) в чем разница:
char arr [80] = "d";
и
char arr [80] = {"d"};

Неужели компилятор во втором случае просто игнорирует скобки? Хоть что-то они должны значить!

9) struct a
{
int arr [20];
} a, b;

int main ()
{
a = b; //Как это происходит. Ведь это arr1 = arr2 - запрещено, т.к. адрес, на который
ссылается указатель arr1 является константным (главное отличие единичного массива от указателя).
}

10)
struct {
signed : 1;
} str;

Чего codeblocks 10 05 не ругается (ошибок ни во время компиляции, ни после нет)? Просто я думал, что это запрещено самим языком (с /c++).
11)
char x;
cout << endl << &x; //printf ("%d", &x);
cout ничего не выводит, в отличии от принтфа. Почему?

12)
while (getchar () != -1);
буферизированный ввод. после комбинации симв+ eof цикл все равно продолжается. почему?


----------------------------------------------------------------------------------------------------------------------------------------------------
А и еще. возникло куча вопросов по поводу битовых полей. Что это такое я вроде понял. Решил пару примеров. Но вот что будет, если поле больше машинного слова, сумма полей не кратно 8 ,почему поля можно определять только в структурах и юнионах и т.д., - на это я ответы не нашел.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
30.06.2012, 00:45     12 в опросов по C /C++. part3 #2
Цитата Сообщение от csrnsdrfg1 Посмотреть сообщение
всем привет. Помогите пожалуйста с вопросами. Во время работы ...
если не секрет - кем работаешь?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
30.06.2012, 01:08     12 в опросов по C /C++. part3 #3
1) нет конфликта, компиль запретил тебе вызывать Мэйн
2) сам
3) LDBL_MAX? ... <climits>
4) эт хрень для принтера которую никто никогда не использует
5) посмотри размер wchar_t

дальше лень
programm1r
 Аватар для programm1r
46 / 45 / 1
Регистрация: 19.06.2012
Сообщений: 134
30.06.2012, 01:25     12 в опросов по C /C++. part3 #4
Не пробовал компилятор Codeblocks 10.05, но по моему:
Цитата Сообщение от csrnsdrfg1 Посмотреть сообщение
Сообщение компилятора: 'main' cannot be used as a function.
ругается на попытку вызова main(), т.к. функция main() зарезервированна для специального использования (точка начала выполнения программы).

Добавлено через 3 минуты
Цитата Сообщение от csrnsdrfg1 Посмотреть сообщение
6) Как размещается в памяти константа, если она превышает размер стандартных типов данных?
она не превышает, потому что как тогда с ней будет работать процессор? Если только в компиляторе не реализована возможность работы с длинной арифметикой...

Добавлено через 2 минуты
Цитата Сообщение от csrnsdrfg1 Посмотреть сообщение
7) при инициализации переменных вместо правой части подсталяется ее адрес?
Напр.:
char arr [] = {'a', true, 3};
char arr [] = "qwerty";
Иными словами, в чем различие между первой и второй записью? Да, выполняется одно и тоже, но, м.б. процессы хоть на каком-то этапе отличаются? Я не знаю ассемблер, но эти записи транслируются точь в точь одинаково?
Во втором случае добавляется 0 в конец массива. А адрес подставляется т.к. в C это синоним указателя на область памяти.

Добавлено через 52 секунды
имеется в виду имя массива, синоним указателя.

Добавлено через 3 минуты
вообще это все есть в любом учебнике, может внимательно почитать?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
30.06.2012, 09:58     12 в опросов по C /C++. part3 #5
По поводу первого - конфликта нет, есть перекрытие имен. И main уже имеет тип int, поэтому ее нельзя использовать как функцию. Убери int main; и сможешь вызвать main().
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16842 / 5263 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
30.06.2012, 10:22     12 в опросов по C /C++. part3 #6
1) см. пост #5
2) unsigned long long и Builder 2010
3) Есть суффикс "L": "long double ld = 1.234L;"
4)
5) Скорее всего потому, что у тебя нету шрифтов для печати соотвествующих wchar'ов (тем значениям наверняка соотвествуют какие-то иероглифы или что-то типа того). Но не уверен
6) Напиши пример программы. Увидишь сообщение компилятора. Если это будет предупреждение, то программа скомпилируется. Далее распечатай полученное число. А см эмпирически ответишь на свой вопрос
7) Первая запись трактуется как "char arr [] = {(char)'a', (char)true, (char)3};"
Как трактуется вторая запись читай тут: http://www.cyberforum.ru/blogs/18334/blog97.html
8) После того, как разберёшься с вопросом 7, на этот вопрос ответишь сам
9) У тебя присваиваются не массивы а структуры. А их копировать можно. Происходит побайтное копирование
10) Для битовых полей допустимо создавать неименованное битовое поле
11) Потому что сначала печатаешь перевод строки, а потом адрес (т.е. это НЕ эквивалентно тому, что написано в скобках, где сначала печатается адрес, а потом первод строки). Не выводится из-за буферизации потока стандартного вывода (буфер обычно сбрасывается при достижении символа перевода строки)
12) Что такое "комбинации симв+ eof"?

Про битовые поля: Чтение битового поля

> почему поля можно определять только в структурах и юнионах и т.д., - на это я ответы не нашел

Битовое поле - это сначала поле, а потом битовое. А поле есть только в структурах, юнионах и классах. Либо я вопроса не понял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2012, 15:15     12 в опросов по C /C++. part3
Еще ссылки по теме:

Плагин для создания нестандартных опросов пользователями WordPress
БД для опросов MS Access
HTML, CSS Способы создания опросов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
magirus
Супер-модератор
 Аватар для magirus
25504 / 14045 / 740
Регистрация: 15.09.2009
Сообщений: 59,841
Записей в блоге: 61
30.06.2012, 15:15     12 в опросов по C /C++. part3 #7
закрыто.

Добавлено через 54 секунды
csrnsdrfg1, на каждый вопрос - создавайте отдельную тему. читайте правила форума.
Yandex
Объявления
30.06.2012, 15:15     12 в опросов по C /C++. part3
Закрытая тема Создать тему
Опции темы

Текущее время: 19:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru