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
}
}
Здравствуйте, 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)
Здравствуйте, DemAS, Вы писали:
DAS>1) можно ли посмотреть код, который получился в результате работы DAS>препроцессора?
если gcc: gcc -E
Препроцессор тут ни при чем, ты просто используешь плюс здесь: printf(b + "\n");
это у тебя превращается в "\n"+4, т.е. указатель на пятый элемент массива "\n", так что хорошо еще, что не падает
Здравствуйте, 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;
}
}
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, Ovl, Вы писали:
Ovl>>он компилируется?
J>компилируется, конечно, чего ж ему не компилироваться, адресная арифметика.
я имею ввиду, что отследить это компилятору под силу.
и для меня странно, что он ничего по этому поводу не сказал, хотя и не должен. vc8 кстати, тоже молчит.
Здравствуйте, Ovl, Вы писали:
Ovl>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, Ovl, Вы писали:
Ovl>>>он компилируется?
J>>компилируется, конечно, чего ж ему не компилироваться, адресная арифметика.
Ovl>я имею ввиду, что отследить это компилятору под силу.
согласен.
Ovl>и для меня странно, что он ничего по этому поводу не сказал, хотя и не должен. vc8 кстати, тоже молчит.
а если максимальный уровень предупреждений включить, все равно молчит?
Здравствуйте, 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
Здравствуйте, 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