Привет
вот такая конструкция работала на каком то(не помню каком) gcc
# gcc -DCPU=PENTIUM test.c
cat test.c
void main(void)
{
#if CPU == PENTIUM
printf("intel");
#elif CPU == ATHLON
printf("amd");
#endif
}
и всё пучком.
на gcc4 то же самое не прокатывает. строки сравнивать не хочет. Судя по ману сравнивать можно только числовые параметры (xnj и подтверждается тестом), а строки как таким образом сравнить не подскажет ли кто?
Заранее спасибо.
[...][c0der@rock ~]$ gcc -DCPU=PENTIUM opennet.c -o opennet
opennet.c: В функции 'main'
opennet.c:4: предупреждение: incompatible implicit declaration of built-in function 'printf'
opennet.c:2: предупреждение: return type of 'main' is not 'int'
[c0der@rock ~]$ ./opennet
intel% [c5der@rock ~]$ rpm -q gcc4.1
gcc4.1-4.1.1-alt11У меня, хоть и с варнингами, но работает.
>[...]
>
>[c0der@rock ~]$ gcc -DCPU=PENTIUM opennet.c -o opennet
>opennet.c: В функции 'main'
>opennet.c:4: предупреждение: incompatible implicit declaration of built-in function 'printf'
>opennet.c:2: предупреждение: return type of 'main' is not 'int'
>[c0der@rock ~]$ ./opennet
>intel%
>
>
>
>
>
> [c5der@rock ~]$ rpm -q
>gcc4.1
>gcc4.1-4.1.1-alt11
>
>У меня, хоть и с варнингами, но работает.
Нет не рабоатет. Оно первую строку всегда вывожит.
Поменяй на DCPU=ATHLON
а ворнинги не изза препрцессора.
#include <stdio.h>
и return 1 в конец main диобавить пропадут они.
PS вот тут подсказали что PENTIUM и ATHLON тож макросы были в старом коде , которые определялись как число и соответственно всё работало.
Но всё равно думаю , нельзя что ли там строки использовать?
>PS вот тут подсказали что PENTIUM и ATHLON тож макросы были в
>старом коде , которые определялись как число и соответственно всё работало.
>
>Но всё равно думаю , нельзя что ли там строки использовать?А откуда вы взяли, что PENTIUM и ATHLON в данном случае - строки? С точки зрения C это ни разу не они.
Если же опустить лирику, то более традиционно IMHO использование макросов примерно таким образом:
#ifdef PENTIUM
printf("intel");
#elif defined ATHLON
printf("amd");
#elif
#error "Unknown processor. You must define PENTIUM or ATHLON."
#endifНу и, соответственно, при компиляции:
gcc -DINTEL test.c
или
gcc -DATHLON test.cЕсли строже (по-моему определение макроса без значения - это расширение gcc), то что-то вроде -DINTEL=1. Вот, как-то так.
Опечатка:
>#elif
> #error "Unknown processor. You must define PENTIUM or ATHLON."
тут конечно же не #elif, а #else.