#define для unsigned long - PullRequest
       5

#define для unsigned long

2 голосов
/ 31 октября 2009

Я пытаюсь использовать директиву #define, чтобы изменить все слова "ulong" на "unsigned long". Вот пример:

#define ulong unsigned long
ulong idCounter = 0;

К сожалению, я думаю, что в конечном итоге заменить ulong на "unsigned", а не "unsigned long". Я попытался "#define ulong (unsigned long)", но это тоже не сработало.

Ответы [ 3 ]

15 голосов
/ 31 октября 2009

Лучше использовать typedef. Причина, по которой ваш макрос может потерпеть неудачу, заключается в том, что он может быть синтаксически недействительным в некоторых местах. Рассмотрим:

double x = calc();
ulong v = ulong(x);

В этом случае вы получите

unsigned long v = unsigned long(x);

Это недопустимо, поскольку используемая форма приведения несовместима с тем, как вы называете тип (она должна состоять из более простой формы, например, из одного слова). Используйте typedef:

typedef unsigned long ulong;
9 голосов
/ 31 октября 2009

почему вы не используете просто typedef?

typedef unsigned long ulong;
2 голосов
/ 31 октября 2009

Ваш макрос работает нормально:

cpp ulong.c

дает

# 1 "ulong.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "ulong.c"

unsigned long idCounter = 0;

Изначально я предполагал, что у вас уже есть typedef с именем ulong и вы пытались переопределить это с помощью препроцессора, но другие люди по-другому это воспринимают. Если вы действительно хотите ulong, вы должны использовать typedef, как они сказали.

...