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

Задачи для тренировки и лучшего понимания - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Теория плагинов http://www.cyberforum.ru/cpp/thread123914.html
Всем привет. Для одной моей проги, нужно реализовать поддержку плагинов. Плагины предполагаются простенькие, написанные на Си. То, что плагин, это просто .so файл - понятно. То, что прога может дергать из .so файла функции - тоже понятно. 1. Непонятно то, как сам плагин сможет дергать функции из программы? 2. Программа написана на С++, но плагины предполагаю писать на Си, во избежания...
C++ ./massdown: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./massdown) всем хай! собираю свою программу на новом железе х86_64 долго не получалось скомпилить. при линковке получал вот такое сообщение: relocation R_X86_64_32 against `a local symbol' я так понял, это из-за того что часть библиотек от которых зависит цель, были собраны как 32-ух битные. но с этим вроде все нормально, пересобрал все либы - скомпилировалось. теперь при запуске получаю такое... http://www.cyberforum.ru/cpp/thread98890.html
Как понять этот константный указатель? C++
В общем, имеется класс Cat. Объект класса - SimpleCat. И имеется функция с константым указателем: const SimpleCat* const FunctionTwo(const SimpleCat* const theCat) Что обозначают все эти const? Насколько я понимаю: 1. Константный указатель. 2. Может ссылаться только на FunctionTwo 3. Ничего не изменяет в объекте. 4. Ничего не делает с объектом theCat.
C++ Перехват и подмена вызываемых функций
Здравствуйте. Нужно подменить вызов таких функций как open(), lstat(), stat(), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса. Интересует мнение других. Как бы вы реализовали эту задачу. Спасибо!

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
27.07.2010, 15:38     Задачи для тренировки и лучшего понимания
Тело макроса - это все то, что идет после #define ИМЯ_МАКРОСА(ПАРАМЕТРЫ)
Скобки нужны для того, чтобы не напутать с приоритетами операций. К примеру, если проанализировать следующую программу:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
#define sum(a, b) a + b
int main()
{
    int x = 5 * sum(2, 3);
    system("pause");
    return EXIT_SUCCESS;
}
Казалось бы, по задумке при подстановке макроса должно было получиться такое выражение:
C++
1
int x = 5 * (2 + 3);
Но получилось такое:
C++
1
int x = 5 * 2 + 3;
В результате, мы имеем совсем не то, что хотели.
Также параметрами макроса могут быть не отдельные объекты, а выражения, поэтому в теле макроса параметры лучше тоже заключать в скобки.
Наиболее "правильный" вариант должен был выглядеть так:
C++
1
2
#define sum(a, b) \
    ((a) + (b))
Заметь, здесь символ '\' означает перенос строки; его нужно использовать тогда, когда твой макрос не влезает в одну строку, иначе все последующие строки препроцессор не отнесет к макросу.
К макросам нужно относиться с осторожностью, что уже показал rangerx.

Добавлено через 2 минуты
Цитата Сообщение от nikkka Посмотреть сообщение
чё за... почему a=b?!?!?!?! О.О
Вспомни, что препроцессор производит подстановку тела макроса и что в параметрах макроса можно передавать выражение. Так что подсчитай, сколько раз выполнится инкремент для каждой из переменных (с учетом того, что последнее выражение тернарного оператора "?:" вычисляться не будет, т.к. условие оператора является истинным)
 
Текущее время: 03:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru