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

Использование строк в макросах С++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Квадратное уравнение http://www.cyberforum.ru/cpp-beginners/thread783801.html
Прога работает, но неправильно считает корни, что не так??? #include <stdio.h> #pragma hdrstop #include <math.h> #include <conio.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv) {float a,b,c,d,x1,x2;
C++ Геометрическая задача (Найти стороны треугольника) Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника. Помогите пожалуйста! http://www.cyberforum.ru/cpp-beginners/thread783795.html
C++ Литература С++
Всем привет ! Нужен список литературы поочередный , с чего начать не зная никакие языки и тд. , можно и видео самоучителей . Желательно с упражнениями , потомучто скоко литературы пересмотрел ничего дельного не нашел . Также список нужных программ для создания программ и дополнительное ПО ,буду благодарен за вашу помощь.
C++ Рекурсия. Составьте программу, которая для заданного натурального числа n вычисляет значение выражения
Составьте программу, которая для заданного натурального числа n вычисляет значение выражения: 1/1+1/2+1/3+1/4+1/...n-1+1\n
C++ нужно исправить ошибку в коде http://www.cyberforum.ru/cpp-beginners/thread783781.html
#include <iostream> using namespace std; template< class T > void selectSort(T* arr, int SIZE) { T tmp; for(int i = 0; i < SIZE; ++i) // i - номер текущего шага { int pos = i; tmp = arr;
C++ -0.1+0.1=-1.38778e-016 Всем доброго времени суток . Такая проблемка . #include <windows.h> #include <iostream> #include <iomanip> #include <fstream> #include <cmath> #include <cstdlib> using namespace std; подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
15.02.2013, 18:25     Использование строк в макросах С++
Сначала был пример:

Цитата Сообщение от Evg Посмотреть сообщение
Код

C++
1
2
3
4
5
6
#define DECLARE_FUNC(name1, body, type_cl, ...) \
  __declspec(dllexport) type_cl name1##_func(__VA_ARGS__) {\
    body; \
  }
 
DECLARE_FUNC (testDeclare, debug_msg ("TestDeclare", "hello!"), void, int x, int y)
после препроцессора превратится в

C++
1
__declspec(dllexport) void testDeclare_func(int x, int y) { debug_msg ("TestDeclare", "hello!"); }
Затем был вопрос:

Цитата Сообщение от vxg Посмотреть сообщение
я думал что препроцессор споткнется об запятую перед hello, но пример работает. как это возможно?
Вот что на это говорит стандарт:

ISO/IEC 9899:1999 (E)
...
6.10.3 Macro replacement
...
11. The sequence of preprocessing tokens bounded by the outside-most matching parentheses forms the list of arguments or the function-like macro. The individual arguments within the list are separated by comma preprocessing tokens, but comma preprocessing tokens between matching inner parentheses do not separate arguments. If there are sequences of preprocessing tokens within the list of arguments that would otherwise act as preprocessing directives, the behavior is undefined.
Вот как надо поступать, если мы хотим вставить круглые скобки в качестве параметра макроса:

C
#define LB (
#define RB )
#define A(x1, x2, x3) x1 qqq x2 qqq x3
A (LB , x , RB)
после препроцессора превратится

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