пара вопросов по препроцессору
От: DemAS http://demas.me
Дата: 16.06.08 09:43
Оценка:
1) можно ли посмотреть код, который получился в результате работы
препроцессора?
2) почему следующая програрамма ничего не выводит, хотя я ожидаю 4-ку:

#include <stdio.h>

main() {
   int a = 2;

   switch(a) {
#define PROCESS(a,b) case a: printf(b + "\n"); break;
      PROCESS(1, 1);
      PROCESS(2, 4);
      PROCESS(3, 9);
#undef PROCESS
   }
}
Posted via RSDN NNTP Server 2.1 beta
Re: пара вопросов по препроцессору
От: Daevaorn Россия  
Дата: 16.06.08 09:46
Оценка: +1 :)
Здравствуйте, DemAS, Вы писали:


DAS>#define PROCESS(a,b) case a: printf(b + "\n"); break;


b + "\n"

ага?
Re: пара вопросов по препроцессору
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 16.06.08 09:48
Оценка: 2 (1)
Здравствуйте, DemAS, Вы писали:

DAS>1) можно ли посмотреть код, который получился в результате работы

DAS>препроцессора?

Да. cpp или gcc -E

DAS>2) почему следующая програрамма ничего не выводит, хотя я ожидаю 4-ку:


DAS>#define PROCESS(a,b) case a: printf(b + "\n"); break;

DAS> PROCESS(1, 1);
DAS> PROCESS(2, 4);
DAS> PROCESS(3, 9);
DAS>#undef PROCESS

Потому что 4 + "\n" это сложение числа и указателя. Попробуйте так: printf("%d\n", b)
Re: пара вопросов по препроцессору
От: jazzer Россия Skype: enerjazzer
Дата: 16.06.08 09:49
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>1) можно ли посмотреть код, который получился в результате работы

DAS>препроцессора?

если gcc: gcc -E

Препроцессор тут ни при чем, ты просто используешь плюс здесь: printf(b + "\n");
это у тебя превращается в "\n"+4, т.е. указатель на пятый элемент массива "\n", так что хорошо еще, что не падает
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: пара вопросов по препроцессору
От: Ovl Россия  
Дата: 16.06.08 09:49
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>1) можно ли посмотреть код, который получился в результате работы

DAS>препроцессора?
можно, смотрите опции коммандной строки компилятора. какой у вас?

DAS>2) почему следующая програрамма ничего не выводит, хотя я ожидаю 4-ку:


а что может вывести этот код?
он компилируется?

main() {
  int a = 2;
  switch(a) {
    case 1: printf(1 + "\n"); break;
    case 2: printf(4 + "\n"); break;
    case 3: printf(9 + "\n"); break;
   }
}
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[2]: пара вопросов по препроцессору
От: DemAS http://demas.me
Дата: 16.06.08 09:57
Оценка:
gcc
компилируется
Posted via RSDN NNTP Server 2.1 beta
Re[2]: пара вопросов по препроцессору
От: jazzer Россия Skype: enerjazzer
Дата: 16.06.08 10:05
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>он компилируется?


компилируется, конечно, чего ж ему не компилироваться, адресная арифметика.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: пара вопросов по препроцессору
От: Ovl Россия  
Дата: 16.06.08 10:08
Оценка: 1 (1)
jasser уже на все ответил

DAS>gcc


тогда флаг -E для вас.
"gcc -E test.cpp" выведет содержимое после препроцессора

DAS>компилируется


нужно превратить параметер в строку.
первый вариант — сделать это в макросе:
#define PROCESS(a,b) case a: printf(#b "\n"); break;

второй вариант — сделать это до макроса:
#define PROCESS(a,b) case a: printf(b "\n"); break;

//...
  PROCESS(2, "4");
//...
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[3]: пара вопросов по препроцессору
От: Ovl Россия  
Дата: 16.06.08 10:10
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Ovl, Вы писали:


Ovl>>он компилируется?


J>компилируется, конечно, чего ж ему не компилироваться, адресная арифметика.


я имею ввиду, что отследить это компилятору под силу.
и для меня странно, что он ничего по этому поводу не сказал, хотя и не должен. vc8 кстати, тоже молчит.
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[4]: пара вопросов по препроцессору
От: jazzer Россия Skype: enerjazzer
Дата: 16.06.08 10:11
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>Здравствуйте, jazzer, Вы писали:


J>>Здравствуйте, Ovl, Вы писали:


Ovl>>>он компилируется?


J>>компилируется, конечно, чего ж ему не компилироваться, адресная арифметика.


Ovl>я имею ввиду, что отследить это компилятору под силу.

согласен.

Ovl>и для меня странно, что он ничего по этому поводу не сказал, хотя и не должен. vc8 кстати, тоже молчит.

а если максимальный уровень предупреждений включить, все равно молчит?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: пара вопросов по препроцессору
От: Ovl Россия  
Дата: 16.06.08 10:13
Оценка:
J>а если максимальный уровень предупреждений включить, все равно молчит?
молчит
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[6]: пара вопросов по препроцессору
От: jazzer Россия Skype: enerjazzer
Дата: 16.06.08 10:14
Оценка:
Здравствуйте, Ovl, Вы писали:


J>>а если максимальный уровень предупреждений включить, все равно молчит?

Ovl>молчит

жаль, что нельзя оценить сообщение смайликом
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: пара вопросов по препроцессору
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 16.06.08 10:17
Оценка:
Здравствуйте, jazzer, Вы писали:

Ovl>>я имею ввиду, что отследить это компилятору под силу.

J>согласен.

Ovl>>и для меня странно, что он ничего по этому поводу не сказал, хотя и не должен. vc8 кстати, тоже молчит.

J>а если максимальный уровень предупреждений включить, все равно молчит?

Нет:

[c0der@xxx ~]$ gcc test2.c -o test2 -W -Wall
test2.c: В функции ‘main’
test2.c:9: предупреждение: форматная строка printf нулевой длины
test2.c:14: предупреждение: control reaches end of non-void function


gcc 4.1.2
Re[6]: пара вопросов по препроцессору
От: Ovl Россия  
Дата: 16.06.08 10:21
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, jazzer, Вы писали:


Ovl>>>я имею ввиду, что отследить это компилятору под силу.

J>>согласен.

Ovl>>>и для меня странно, что он ничего по этому поводу не сказал, хотя и не должен. vc8 кстати, тоже молчит.

J>>а если максимальный уровень предупреждений включить, все равно молчит?

PC>Нет:


PC>

PC>[c0der@xxx ~]$ gcc test2.c -o test2 -W -Wall
PC>test2.c: В функции ‘main’
PC>test2.c:9: предупреждение: форматная строка printf нулевой длины
PC>test2.c:14: предупреждение: control reaches end of non-void function


PC>gcc 4.1.2


рад за gcc. тем не менее ответ был про vc8
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.