Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: LMZiushka
Дата сообщения: 28.06.2007 14:59
товарищи, чем бы Линуксе просмотреть (как нибудь по человечески=)) список классов/функций в сошке (.so)
file file1.so:
ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped


Автор: 0Vovan0
Дата сообщения: 01.07.2007 18:07
никто не подскажет как в с++ выводить на cout буковки разными цветами/фоном/шрифтом ?
Автор: Lyrik
Дата сообщения: 02.07.2007 00:12
0Vovan0
Желательно уточнять ОС при задании вопроса.
Методы cout мне не известны, но можно воспользоваться другими средствами.
[more=*nix]
Код: #include<iostream>
//====================================================================
//
// Program Name: Unix Terminal Colors
// Assignment: 1
// Date: August 28, 2002
//
// Programmer: Nomed Noced
// Course: CSC 112 A Professor: Nirre Pluf
//
// Program Description:
// Example program showing the different colors available on a
// Unix terminal.
//
// Color Use:
// Add the #define statements for each color, then use with
// << operator and ostream. Note, color remains until next
// color "code" given to the stream.
//
//====================================================================

#define GRAY_BACKGROUND "\033[47m"
#define BLACK_BACKGROUND "\033[40m"
#define RED_BACKGROUND "\033[41m"

#define GREEN "\033[32m"
#define RED "\033[31m"
#define WHITE "\033[37m"
#define YELLOW "\033[33m"
#define BLUE "\033[34m"
#define PURPLE "\033[35m"
#define PINK "\033[35m"
#define CYAN "\033[36m"

#define BOLD_GREEN "\033[1;32m"
#define BOLD_RED "\033[1;31m"
#define BOLD_WHITE "\033[1;37m"
#define BOLD_YELLOW "\033[1;33m"
#define BOLD_BLUE "\033[1;34m"
#define BOLD_PURPLE "\033[1;35m"
#define BOLD_PINK "\033[1;35m"
#define BOLD_CYAN "\033[1;36m"

#define NORM "\033[0m"

using namespace std;

int main()
{
cout << RED << "red " << GREEN << "green " << NORM << "norm \n";
cout << YELLOW << "yellow " << PINK << "pink \n" << NORM;
cout << BOLD_RED << "bold red" << NORM << '\n';
cout << BLACK_BACKGROUND << WHITE << "white on black background"
<< NORM << '\n';
return 0;
}
Автор: amfius
Дата сообщения: 02.07.2007 20:59
Решил попробовать идти другим путём - создать 2 проекта, в одном из которых будет общий файл с исходным кодом common.c и файл с исходным кодом project1.c, а другой проект будет ссылаться на этот common.c из первого проекта. Среда программирования - Eclipse CDT 3.3 (недавно вышла) + Cygwin (содержит gcc 3.4).

Создаю Project1, в нем папку Source_code.
Содержимое project1.c (в папке Source_code проекта Project1):
#include "common.c"
// ... вызовы commonfunction(...)

Содержимое common.c (в папке Source_code проекта Project1):

static возвращаемый_тип commonfunction(...) {
// операторы commonfunction
}

Создаю Project2, в нем папку Source_code.
Содержимое project2.c (в папке Source_code проекта Project2):
#include "common.c"
// ... вызовы commonfunction(...)

Ставлю ключ компиляции во втором проекте, чтобы видел общий файл
I: "../../Project1/Source_code"
Получаю предупреждение: commonfunction defined, but not used. Странно как-то, учитывая, что commonfunction использовалась и в project1.c, и в project2.c. Можно ли избавиться от этого предупреждения? Или программы с разделяемым общим кодом пишут не так?
Автор: RedLord
Дата сообщения: 02.07.2007 22:30
Сорри за оффтоп.

veronica b


Цитата:
но у него просто не было времени её реализовать!



привожу текст на русском:

Цитата:

В системе Multics была впервые реализована и следующая инновационная идея, а именно - динамическое связывание (dynamic linking) исполняемой программы с библиотеками кода. Благодаря динамическому связыванию, исполняемый процесс мог запрашивать у системы о подключении дополнительных сегментов к собственному адресному пространству, а именно сегментов, содержащих полезный код для исполняемой программы.

Таким образом программы смогли автоматически использовать внешние библиотеки кода, хранимые в отдельных сегментах, создавая при этом динамические связи с функциями, хранимыми в этих библиотеках. Динамическая связь с внешним исполняемым кодом создавалась всего один раз, во время первого вызова функции из библиотеки, и в дальнейшем могла быть использована повторно. Так как каждому пользователю в системе соответствовали отдельные процессы, то различные внешние библиотеки могли быть подключены к одной и той же программе, в зависимости от потребностей пользователя.

Автор: rain87
Дата сообщения: 03.07.2007 13:58
млин. вы никак по поводу длл не успокоетесь? ))) жжоте, товарисчи
Автор: Abs62
Дата сообщения: 03.07.2007 14:28
amfius

Цитата:
Или программы с разделяемым общим кодом пишут не так?

Не так. Объявления выносятся в заголовочный файл, его и подключают директивой include.
Примерно так:

Код: common.h:
возвращаемый_тип commonfunction(...);

common.c:
#include "common.h"
возвращаемый_тип commonfunction(...) {
// операторы commonfunction
}

project1.c
#include "common.h"
// ... вызовы commonfunction(...)
Автор: UserX3
Дата сообщения: 03.07.2007 20:03
Можно ли в Borland C++Builder 6 добавлять ресурсы HTML (как в MS Visual C++ 6) и использовать их в CppWebBrowser?
Автор: amfius
Дата сообщения: 03.07.2007 23:38

Цитата:
Не так. Объявления выносятся в заголовочный файл, его и подключают директивой include.


Цитата:
common.h:
возвращаемый_тип commonfunction(...);

common.c:
#include "common.h"
возвращаемый_тип commonfunction(...) {
// операторы commonfunction
}

project1.c
#include "common.h"
// ... вызовы commonfunction(...)

А можно конкретный коротенький пример? А то я пытаюсь откомпилить, и у меня выдает ошибку: "ubdefined reference to _commonfunction"
Автор: Abs62
Дата сообщения: 04.07.2007 00:40
amfius

Цитата:
А можно конкретный коротенький пример? А то я пытаюсь откомпилить, и у меня выдает ошибку: "ubdefined reference to _commonfunction"

Это линкер ругается? Видимо, common.c не включён в проект. Добавь его.
Автор: amfius
Дата сообщения: 04.07.2007 10:42

Цитата:
Это линкер ругается? Видимо, common.c не включён в проект. Добавь его.

А для common.c нужно создавать отдельный проект или добавлять его уже в существующие project1 и project2? И еще: при описании commonfunction в common.c и в common.h какие-нибудь дополнительные спецификаторы типа extern нужны?
Автор: Abs62
Дата сообщения: 04.07.2007 15:23
amfius

Цитата:
А для common.c нужно создавать отдельный проект или добавлять его уже в существующие project1 и project2?

Добавлять, вестимо.

Цитата:
И еще: при описании commonfunction в common.c и в common.h какие-нибудь дополнительные спецификаторы типа extern нужны?

Для функций - не нужны, для переменных - extern нужен в .h и не нужен в .c.
Автор: HellSatan
Дата сообщения: 05.07.2007 14:24
можно ли както спрятать консольную программу без написания дополнительных *.dll файлов ? нужно чтоб её небыло в списке процессов и не было окна консоли а также по возможности записывание программы в автозагрузку для системы Win
Автор: RedLord
Дата сообщения: 05.07.2007 14:55
HellSatan
тебе не сюда.
и бросай троянописанием заниматься
Автор: HellSatan
Дата сообщения: 06.07.2007 00:02
RedLord
а куда ?
это не троян а просто маленька прога-шутка если надо могу исходник запостить
если б знал как трояны пишутся то с такими вопросами писал бы в совершенно другой форум
Автор: RedLord
Дата сообщения: 06.07.2007 11:28
HellSatan


Цитата:
нужно чтоб её небыло в списке процессов



Цитата:
если б знал как трояны пишутся то с такими вопросами писал бы в совершенно другой форум


тебе на такой форум и нужно идти.
фактически требуется кастрированная техника троянов
Автор: Qraizer
Дата сообщения: 06.07.2007 14:10
Самое простое:
1. не прятать, а назвать стандартно, svchost.exe, например. Их и так грузится не один экземпляр. Понятное дело, нужно позаботиться о том, чтобы не перезаписать оригинал, например, грузить из другого каталога.
2. запускать сервисом.
3. если сервис, то и проблем с окном нет; иначе можно просто написать эту апликуху как GUIное, а не консольное, и не создавать никаких окон.

Если не подходит - направление тебе указали.
Автор: Cheery
Дата сообщения: 09.07.2007 02:20
Вопрос насчет темплейтов.. что то найти толком не могу.
как можно определить тип переменной, которая в данный момент используется?
зачем нужно.. используется доп пакет для quad double.. ну и нужно определить число pi либо с точностью до double, либо же до quad double в зависимости от типа переменной, которая передается в функцию.
ну и для ситуации когда возвращается в любом случае double.. но тогда для quad double надо вызвать функцию to_double для преобразования в обычный double. (хотя, думаю, для этого можно просто определить преобразование типов)

ps: я могу, конечно, передавать доп. параметр указывающий на тип, но хочется элегантней
Автор: Lyrik
Дата сообщения: 09.07.2007 10:32
Cheery
смотри в сторону typeid

Код: template < typename T >
T my_max( T arg1, T arg2 ) {
    cout << typeid( T ).name() << "s compared." << endl;
    return ( arg1 > arg2 ? arg1 : arg2 );
}
Автор: WiseAlex
Дата сообщения: 09.07.2007 11:25
Cheery
возможно лучше использовать шаблоны и специализации а не идентификацию типов
Автор: Qraizer
Дата сообщения: 09.07.2007 13:10
Хм... Традиционно для этого используются классы свойств. Обычно, его шаблон "пустой" и содержит только скелет без конкретного полезного содержимого, например как std::numeric_limits<>, а конкретным содержанием его наполняют специализации, которые нужно обязательно создавать для каждого используемого T. Ну и предоставить уже готовые специализации для стандартных T, например, float, double и long double. Но я когда-то прикололся и для своего класса комплексных чисел написал примерно так:
Код: template <class T>
struct constants
{
static const T Pi; // Число "пи"
static const T Pi2; // 2*Pi
static const T degPerRad; // Количество градусов в радиане
static const T grdPerRad; // Количество градов в радиане
static const T log_10; // log(10)
static const T log_2; // log(2)
static const T const0; // 0
static const T const1; // 1
static const T const2; // 2
static const T const4; // 4
static const T const10; // 10
/* ... */
};

/* ... */

template <class T> const T constants<T>::const0 =static_cast<T>( 0);
template <class T> const T constants<T>::const1 =static_cast<T>( 1);
template <class T> const T constants<T>::const2 =static_cast<T>( 2);
template <class T> const T constants<T>::const4 =static_cast<T>( 4);
template <class T> const T constants<T>::const10=static_cast<T>(10);

// Число "пи" типа T
template <class T>
const T constants<T>::Pi=acos(constants<T>::const0)*constants<T>::const2;

// Число 2*"пи" типа T
template <class T>
const T constants<T>::Pi2=constants<T>::Pi*constants<T>::const2;

// Коэффициент перевода градусов в радианы и обратно
template <class T>
const T constants<T>::degPerRad=static_cast<T>(static_cast<T>(180)/constants<T>::Pi);

// Коэффициент перевода градов в радианы и обратно
template <class T>
const T constants<T>::grdPerRad=static_cast<T>(static_cast<T>(200)/constants<T>::Pi);

// Коэффициенты перевода логарифмов и антилогарифмов
template <class T>
const T constants<T>::log_10=log(constants<T>::const10);
template <class T>
const T constants<T>::log_2=log(constants<T>::const2);
Автор: Kabanets2005
Дата сообщения: 09.07.2007 16:50
Люди, может кто-нибудь подсказать, где можно почитать о работе с портами (COM, USB, LTP, GPIB)? Очень нужно!
Спасибо заранее!
Автор: Cheery
Дата сообщения: 09.07.2007 18:33
WiseAlex

Цитата:
возможно лучше использовать шаблоны и специализации а не идентификацию типов

каким образом? у меня есть одна длинная функция. в которой идут вычисления. чтобы не повторять ее для другого типа (так как могут использоваться оба) переписал в шаблон.
но в вычислениях используется число пи, которое должно быть задано с точностью, которая на данный момент используется при вызове функции. этот вопрос и интересовал.
я, просто, с шаблонами не очень, так как изучал c++ давно, когда еще не было этих нововведений
Автор: RedLord
Дата сообщения: 09.07.2007 19:09
Cheery

template <class Tp>
Tp long_calc(const Tp& x, const Tp& y)
{
return x+y*constants<Tp>::Pi;
}
, где constants - как определил Qraizer


Автор: WiseAlex
Дата сообщения: 09.07.2007 19:12
Cheery
в этом случае логично сделать как предложил Qraizer или функцию
template <class T> pi();
Автор: Igorr
Дата сообщения: 10.07.2007 02:45
зачем использовать пушку, если о рогатки достаточно: sizeof(.)
Автор: Cheery
Дата сообщения: 10.07.2007 03:18
Сорри, что торможу.. когда пишешь одновременно на нескольких языках мешанина получается.
короче так и не понял как по нормальному и просто переопределил функцию в зависимости от передаваемого типа
inline double pi(double dummy) {return 2*acos(0.0);}
inline qd_real pi(qd_real dummy){return qd_real::_pi;}
то, что acos, это нормально.. функция часто не вызывается
Автор: Igorr
Дата сообщения: 10.07.2007 03:30
Я отвечал на
Цитата:
как можно определить тип переменной, которая в данный момент используется?
зачем нужно.. используется доп пакет для quad double.. ну и нужно определить число pi либо с точностью до double, либо же до quad double в зависимости от типа переменной, которая передается в функцию


А для последнего поста (без шаблонов):
Get_pi(double& dummy) { dummy = 2*acos(0.0);}
Get_pi(qd_real& dummy){dummy = 2*acos(qd_real("0.0"));}
В зависимости от типа аргумента будет вызываться нужная функция.
Автор: Cheery
Дата сообщения: 10.07.2007 03:36
Igorr

Цитата:
В зависимости от типа аргумента будет вызываться нужная функция.

обязательно так? через возвращаемое значение нельзя? или убьется после выхода?
Автор: Igorr
Дата сообщения: 10.07.2007 03:37
а если нужны фукции типа, то они у вас и так уже переопределены.
или я не понял проблему.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.