2013-07-09 4 views
-1

мне интересно, если это возможно, как-то сделать что-то подобное в C/C++:#define значение переменной? Препроцессор директива

int a = 5; 
#define A a 
printf("%s\n", A); // should print 5 (value of 'a' variable) 

Ok, этот код дает мне Сегментация ошибку (Windows 7, Code :: Blocks):

#include <stdio.h> 

int main() 
{ 
    int a = 5; 
    #define A a 

    #if defined(A) 
     printf("%d\n", A); 
    #endif 

    return 0; 
} 
+0

Для того, чтобы ваш вопрос, чтобы быть презентабельным, он должен сказать, что не работает. Если ваша проблема заключается в том, что этот код не работает, его следует сократить. Обратите внимание на 'printf ("% s \ n ", 5);' вероятно, делает то же самое. – chris

+3

Почему '% s', а не'% d'? [С '% d' он будет просто работать] (http://ideone.com/6QkSkt). – dasblinkenlight

+0

Если бы вы попытались скомпилировать то, что вы написали, вы получите свой ответ (также замените% s на% d). –

ответ

1

Определенные стили кодирования могут спасти вас от многих ошибок, в том числе выше.

В реальных приложениях вы WONT знают, что макрос будет так будет трудно выбрать между % S и % г.

Иногда это не проблемы, это верования, ведущие к ним.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Примеры:

Это плохое кодирование -стиль:

#include <stdio.h> 

int main() 
{ 
    int a = 5; 
    #define A a 

    #if defined(A) 
     printf("%d\n", A); 
    #endif 

    return 0; 
} 

Это сносное * Coding стиле

int main() 
{ 
    #ifdef WIN32 
     #define a 5 
    #elif defined __unix__ 
     #define a 6 
    #endif 

    int A = a; 

    printf("%d\n",A); 

    return 0; 
} 
  • зависит от кодирования Политика вашей команды.


Это предпочтительный стиль кодирования:

int main() 
{ 
    int A = 6; 

    #ifdef WIN32 
     A = 5; // Windows hate 6 and *nix. 
    #endif 

    printf("%d\n",A); 

    return 0; 
} 
+0

_'Это переносимый стиль кодирования'_ Аргументируется! –

+0

@ g-makulik Это зависит от политики * вашей команды. Моя команда предпочитает использовать как можно меньше макросов. –

+1

Праведные парни, которые вы;). Я всегда старался абстрагировать такие вещи (например, реализации, зависящие от ОС), используя либо динамические, либо статические методы полиморфизма. –

4

Вы должны использовать %d вместо %s:

printf("%d\n", A); 

Проверить this, оно работает!

Смежные вопросы