The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
препроцессор cpp . сравнение строк, !*! borey2005, 10-Июл-07, 14:58  [смотреть все]
Привет
вот такая конструкция работала на каком то(не помню каком) 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 и подтверждается тестом), а строки как таким образом сравнить не подскажет ли кто?
Заранее спасибо.
  • препроцессор cpp . сравнение строк, !*! phpcoder, 15:05 , 10-Июл-07 (1)
    [...]

    [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

    У меня, хоть и с варнингами, но работает.

    • препроцессор cpp . сравнение строк, !*! borey2005, 15:21 , 10-Июл-07 (2)
      >[...]
      >
      >[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 тож макросы были в старом коде , которые определялись как число и соответственно всё работало.
      Но всё равно думаю , нельзя что ли там строки использовать?

      • препроцессор cpp . сравнение строк, !*! jd, 20:09 , 10-Июл-07 (3)
        >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. Вот, как-то так.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру