Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Работа со строками. Связное хранение строк. https://www.cyberforum.ru/ cpp-beginners/ thread43045.html
Постановка задачи В текстовом файле хранится последовательность слов. Предполагается, что слово содержит не более 20 букв, слова отделяются друг от друга одним или бо-лее пробелами, количество слов в файле не ограничено. Требуется: 1. Прочитать исходный текст из файла и поместить его в памяти, использовать однонаправленные циклические цепочки . Каждое звено текста размещается в памяти...
Нужно исправить 2 ошибки в коде C++
собственно, САБЖ. нужно исправить 2 ошибки в коде, чтобы его можна было скомпилить и сделать из него ехе-шник. код немалый, тому залил на sendspace: http://sendspace.com/file/ubkkh6 времени немного - до утра понедельника..выручайте, народ, пожалуйста
C++ Вывод случайных текстов на экран https://www.cyberforum.ru/ cpp-beginners/ thread42999.html
помогите пожалуйста, мне нужен код для случайных выводов текстов на экран
C++ обход массива рендом. Дан массив 10 на 10. Рендом выбираем точку, сравниваем элемент... Затем нужно опять выбирать рендом элемент, но так что бы не выбирать тот, который уже брали. Как можно запомнить, что выбирали уже, а что нет? https://www.cyberforum.ru/ cpp-beginners/ thread42962.html
Не работает цикл for С++ Borland C++
Элементарная программа: #include <iostream.h> #include <graphics.h> #include <math.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <dos.h> void main ()
C++ Программа производит неправильный вывод Помогите найти ошибку!!! Заранее спасибо!!! #include <iostream.h> main (void) { int a = 1; void f() { int b = 1; https://www.cyberforum.ru/ cpp-beginners/ thread42956.html
C++ Никак не могу найти ошибку https://www.cyberforum.ru/ cpp-beginners/ thread42919.html
#include<iostream.h> #include<conio.h> #include<math.h> #include<STDLIB.H> #include<COMPLEX.H> main() { const m=7, n=7; m5: int A,i,j,F; clrscr();
C++ friend функция С++ на MSVC 6.0
Переписал из книги С. Прата такое : class Port { private: int bootles; ....... public: ....... friend ostream & operator<<(ostream & os, const Port & p); };
C++ как остановить программу? я написал простенькую программу и у меня появилась проблема. когда запускаю программу вожу число программа с ним чото делает а кода выводится результат окно закрывается и я не успеваю глянуть на результат. https://www.cyberforum.ru/ cpp-beginners/ thread42856.html C++ исключения программа реализует проверку на двоичное число: #include <iostream> #include <string.h> using namespace std; //класс исключений class error{ public: char str; //конструктор, который присваивает строке stri значение строки str https://www.cyberforum.ru/ cpp-beginners/ thread42824.html
переставить елементы массива C++
Задали задачу: В массиве переставить значения в обратном порядке. Тоесть(1,2,3,4,5)надо перевернуть(5,4,3,2,1) Написал код ,вроде должен работать, но не работает. const int n=5; int a={1,2,3,4,5},buf; for(int i=0;i<n/2;i++) { bool f=true; for(int j=n-1;j>n/2;j--)
C++ решение функции и запись результата в файл Условие в прилогаемом файле... https://www.cyberforum.ru/ cpp-beginners/ thread42816.html
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.07.2009, 16:33 0

Для чего нужен define? - C++ - Ответ 209610

05.07.2009, 16:33. Показов 44277. Ответов 35
Метки (Все метки)

Лучший ответ Сообщение было отмечено как решение

Решение

Попробую объяснить, как ситуация обстоит на самом деле. В процессе компиляции есть две стадии, которые условно можно считать независимыми. Это препроцессирование исходного текста и дальнейшая его трансляция.

На этапе препроцессирования у тебя просто обрабатывается текст (асбтрагированно от того, что это текст программы на языке Си или Си++) и делается подстановка всех define'ов

Т.е. возьмём вот такой пример:

C
1
2
3
4
5
6
7
8
9
10
11
#define N 20
 
int a[N];
int x;
 
void func (void)
{
  int i;
  for (i = 0; i < N; i++)
    x += a[i];
}
Сначала запускается препроцессирование, которое заменить все вхождения define'ов на их определения. Замена делается в ТЕКСТОВОМ виде. Т.е. после препроцессирования мы будем иметь такой промежуточный текст

C
1
2
3
4
5
6
7
8
9
int a[20];
int x;
 
void func (void)
{
  int i;
  for (i = 0; i < 20; i++)
    x += a[i];
}
Т.е. все вхождения N были заменены на 20. В дальнейшем этот текст уже отдаётся на трансляцию

Надо чётко понимать, что #define - это по большому счёту конструкция препроцессора, но не языка. Это НЕ глобальная переменная. Т.е. если написать такой код:

C
1
2
3
4
5
6
7
8
9
10
#define N 20
 
int a[N];
...
 
void func (void)
{
  int N;
  N++;
}
То в функции func НЕ будет заведена локальная переменная, как это вроде бы ожидалось. После препроцессирования текст будет такой:

C
1
2
3
4
5
6
7
8
int a[20];
...
 
void func (void)
{
  int 20;
  20++;
}
что на этапе трансляции вдаст ошибку

Теперь к вопросу, для чего это нужно. В конкретно данном примере этим макросом N я задал размер массива, а потом везде работал именно через макрос. Можно сразу написать 20, с точки зрения конкретно данного примера ничего не поменяется. НО. Если мне нужно поменять размер массива с 20 на 30, то я просто меняю значение define'а, а во всех остальных местах это фактически изменится автоматически. Если же писать непосредственно 20, то потом во всех местах надо менять 20 на 30, а таких мест может быть много

Ну я так описал самый примитив, чтобы понятно было. Мудростей и премудростей с препроцессированием довольно много

Добавлено через 2 минуты 42 секунды
Цитата Сообщение от Search.. Посмотреть сообщение
Define объявлена устаревшей в стандарте С++ (ISO). Вместо define нужно использовать const.
Скорее всего ты что-то путаешь. Возможно, речь шла вот о чём. Вси в качестве размерностей массива можно было указывать только константы и нельзя было переменные. Такми образом код

C
1
2
const int n = 20;
int a[n];
с точки зрения Си является некорректным. В Си++ они разрешили использовать в этом месте переменные (и выражения с ними), если переменная имеет модификатор const. А потом выдали рекомендацию использовать именно const переменную, а не макрос (ибо макрос штука опасная). Но уж точно не объявляли #define устаревшей.

Вернуться к обсуждению:
Для чего нужен define? C++
16
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2009, 16:33
Готовые ответы и решения:

Для чего нужен C++?
Уважаемые, я учу C++ уже 7 лет, зачем нужен C++?

Для чего нужен с++?
Я школьник, мне 16 лет, учусь в 10 классе, планирую поступить на факультет защиты информационных...

Для чего нужен break?
для чего нужен break?

Для чего нужен rdstate()
Например cout&lt;&lt;&quot;sdxcfc&quot;&lt;&lt;output.rdstate(); Где output объект ostrstream

35
05.07.2009, 16:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2009, 16:33
Помогаю со студенческими работами здесь

Для чего нужен символ \b?
для чего нужен символ \b??

Для чего нужен Sizeof
Вот строка memcpy(pMatrPr, pMatr, sizeof(double) * n * m); Это копирование исходной матрицы в...

Для чего нужен EOF?
задание такое:написать программу, печатающую все вводимые символы в верхнем регистре, в строку...

Для чего нужен конструктор?
если несложно, то объясните для чего нужен конструктор? я прочитал, что он требуется для...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru