Код (Text): #define int x[] #define int *y x a; y b; если кто знает подскажите, чем тип переменной а отличается от типа переменной b
Наверное, чтобы это комрилировалось без ошибок должно выглядеть так: typedef int x[]; typedef int *y; x a; y b; А вообще имя массива это константный указатель.
#define int x[] #define int *y x a; y b; разве так можно? Я бы понял если бы #define y int * С иксом вообще непонятно.
насчет "ничем" я бы поспорил. вот код: Код (Text): int x[5]; int *y; x[2] = 1; y[2] = 1; а вот что генерирует компилятор: Код (Text): ; Line 7 mov DWORD PTR _x$[ebp+8], 1 ; Line 8 mov eax, DWORD PTR _y$[ebp] mov DWORD PTR [eax+8], 1 разница огромная, и при связывании модулей на C и ассемблере я на этом несколько раз подъ...ошибался в общем.
И ещё sizeof() выдаст разный размер для таких переменных: Код (Text): int a [] = { 4, 12, 8 }; // sizeof (a)=12 int *b = { 4, 12, 8 }; // sizeof (b)=4
володь, я думаю вопрос был не в дефайне а именно в разнице между двумя объявлениями. по крайней мере я именно так его понял. Хотя согласен - как минимум typedef - за такие дефайны руки отрывать надо.
int a [] = { 4, 12, 8 }; // sizeof (a)=12 int *b = { 4, 12, 8 }; // sizeof (b)=4 Э-э-э! AsmGuru62 - ты это чего? В одном случае имеем объявление массива из трех переменных по четыре байта каждая - итого 12. Во втором имеем указатель на массив из int - т.е. 4 байта... Так что тут разница ого-го какая!
#define int x[] #define int *y Эта хрень вообще должна ошибку препроцессора вызывать, т.к. сначала макрос int определяется как x[], а потом переопределяется как *y. Переопределение макросов невозможно.
Код (Text): typedef int x[]; typedef int *y; Здесь типы x и y ничем не отличаются. А вот здесь смысл уже немного другой: Код (Text): typedef int x[5]; infern0 Код (Text): int x[5]; int *y; Ну так x - массив из 5 элементов, а y - просто указатель, разница очевидна. AsmGuru62 А такой вариант у меня вообще не компилится: Код (Text): int *b = { 4, 12, 8 };
Подумал я что ветка подходящая чтоб спросить... Как в C задать массив одинаковых элементов определенной длины, т.е. что в masm выглядело бы так: sBuff db 260 dup ("1") и желательно ещё в конце буфера задать 0, т.е. чтоб получилась zero string
All вместо #define, конечно должно быть typedef вобщем я уже разобрался (не без вашей помоши) почему неполучалось заменить переменную типа x на переменную типа y
volodya > и так до 260 Не, это не прикольно, неужели C настолько туп. В том же питоне можно написать например так: win32api.OutputDebugString("%s" * 50) как тоже самое сделать на C ?
Как тебе сказать... Теперь уже задумался всерьез... Нет, насколько я знаю, в С нет аналогов dup, times и т.п. Поэтому тебе придется поступать через 屁股. Например, вот так: char sBuff[260]; memset( buffer, '1', 260 ); Это уродливо, но ни до какой директивы препроцессора я так и не додумался