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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Квадратное уравнение http://www.cyberforum.ru/cpp-beginners/thread783801.html
Прога работает, но неправильно считает корни, что не так??? #include <stdio.h> #pragma hdrstop #include <math.h> #include <conio.h>...
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...
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
Эксперт CАвтор FAQ
17943 / 6174 / 411
Регистрация: 30.03.2009
Сообщений: 16,946
Записей в блоге: 27
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 )
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru