powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Условная компиляция
10 сообщений из 10, страница 1 из 1
Условная компиляция
    #33577175
Avatar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!!! Подскажите, что такое условная компиляция?

И как правильно и где использовать данные вещи:
Код: plaintext
1.
2.
3.
4.
#ifndef _Example _h_

#else

#endif
...
Рейтинг: 0 / 0
Условная компиляция
    #33577233
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvatarЗдравствуйте!!! Подскажите, что такое условная компиляция?

И как правильно и где использовать данные вещи:
Код: plaintext
1.
2.
3.
4.
#ifndef _Example _h_

#else

#endif
Обычно к этой байде в следующих случаях прибегают.
1. Не существует универсальных функций для работы на разных осях, хардах.
2. Проект нуна компилировать в различных конфикурациях. Классический примеры - дебаг, релиз; юникод, мальтибайт.
3. Один и тотже файл используется в разных проектах.

Может кто-нито еще что придумает...
...
Рейтинг: 0 / 0
Условная компиляция
    #33578600
_shumer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы ответил проще:
директива #ifdef говорит компилятору, чтобы он компилировал весь последующий код до #endif , если указанный идентификатор ранее был определен директивой #define , и не компилировал в противном случае.

Классический пример из Страуструпа
Код: plaintext
1.
2.
3.
4.
int f(int a
#ifdef arg_two
,int b
#endif
);
...
Рейтинг: 0 / 0
Условная компиляция
    #33602359
Avatar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор _shumerЯ бы ответил проще:
директива #ifdef говорит компилятору, чтобы он компилировал весь последующий код до #endif, если указанный идентификатор ранее был определен директивой #define, и не компилировал в противном случае.

Классический пример из Страуструпа
Код: plaintext
1.
2.
3.
4.
int f(int a
#ifdef arg_two
,int b
#endif
);


Вы привели прототип функции. Обратиться ко второму аргументу нельзя, как же его использовать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
int f(int a
#ifdef arg_two
,int b
#endif
);

int main(int argc, char *argv[])
{
	int c= 1 ;
	return f( 1 , c);	//error C2660: 'f' : function does not take 2 arguments
}

int f(int a
#ifdef arg_two
,int b
#endif
)
{
	b= 1 ;		//error C2065: 'b' : undeclared identifier
	return  1 ;	
}
...
Рейтинг: 0 / 0
Условная компиляция
    #33602675
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvatarВы привели прототип функции. Обратиться ко второму аргументу нельзя, как же его использовать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
int f(int a
#ifdef arg_two
,int b
#endif
)
{
#ifdef arg_two
	b= 1 ;
#endif
	return  1 ;	
}

int main(int argc, char *argv[])
{
#ifdef arg_two
	int c= 1 ;
#endif
	return f( 1 
#ifdef arg_two
                       , c
#endif
                            );
}

...
Рейтинг: 0 / 0
Условная компиляция
    #33606639
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AvatarЗдравствуйте!!! Подскажите, что такое условная компиляция?

И как правильно и где использовать данные вещи:
Код: plaintext
1.
2.
3.
4.
#ifndef _Example _h_

#else

#endif


удобно если есть разные версии продукта lite, trial, demo, ....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#ifndef __TRIAL__
   
   if( check_date() )
   {
       RunTrialDialog();
       return;
   }

#else 
  
   if( !check_alladin_key() )
   {
         RunDemoDialog();
         return;
   }

#endif
[/quot]
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Условная компиляция
    #34884281
mallory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avatarint main(int argc, char *argv[])
{
int c=1;
return f(1, c); //error C2660: 'f' : function does not take 2 arguments
}При попытке компиляции программы Hello2 из книги “Win32 API Эффективная разработка приложений”( Ю.Щупак), стр.54, выдало :
error C2660: 'CreateSolidBrush' : function does not take 3 arguments c:\documents and settings\malor\мои документы\vc_projects\win32api\ch_01\hello2\hello2.cpp
про строку со словом SetClassLong :
Код: plaintext
1.
2.
case WM_CREATE:
	SetClassLong(hWnd,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush( 200 , 160 , 255 ));
   break;
Как быть?

Про error C2660 из MSDN :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SYMPTOMS
When using the Microsoft Foundation Classes (MFC), the following error may occur when making a Windows 
application programming interface (API) call from within a member function of a window class: 
   C2660: 'function' : function does not take 'number' parameters
				
CAUSE
Many of the Windows API calls are accessed in the Microsoft Foundation Classes through member functions 
of the same name as the API calls. This means that the name will be recognized, but because most member 
functions require fewer parameters than their API counterparts, the C2660 error occurs. 
RESOLUTION
Either of the following two methods eliminates the error: 
Adjust the function call to conform to the format of the member: 
function call.
   -or-						
Use the scope resolution operator (::) to tell the compiler to look for the function name in the global name space.
MS VisualStudio 2005
...
Рейтинг: 0 / 0
Условная компиляция
    #34884570
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
malloryКак быть?почитать то, что ты процитировал и осмыслить.
...
Рейтинг: 0 / 0
Условная компиляция
    #34885096
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может сначала почитать хэлп про функцию CreateSolidBrash()?
...
Рейтинг: 0 / 0
Условная компиляция
    #34899144
mallory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetClassLong Function
DWORD SetClassLong(
HWND hWnd,
int nIndex,
LONG dwNewLong
);


“…but because most member functions require fewer parameters than their API counterparts, the C2660 error occurs.”
“…но т.к. большинство функций-членов(эмэфцэшных, по-видимому) требует меньшее количество параметров, чем их API-аналоги, то происходит C2660 error”

Согласно ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vccomp/html/2e01a1db-4f00-4df6-a04d-cb6f70a6922b.htm :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Error Message 
'function' : function does not take number parameters
The function is called with an incorrect number of parameters.
C2660 can occur if you accidentally call a Windows API function rather than an MFC member function of the same 
name. To solve this problem: 
-- Adjust the function call to conform to the format of the member function call.
-- Use the scope resolution operator (::) to tell the compiler to seek the function name in the global 
name space.
Т.е. VStudio ждет что я буду использовать функцию из MFC ? Что дальше предпринимать?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Условная компиляция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]