2015-09-15 2 views
-3

Я попытался реализовать то, что задано в этом вопросе. sizeof implementationреализация оператора sizeof в C

#include <stdio.h> 
#include <stdint.h> 

#define my_sizeof(type) ((char*)(&type + 1)-(char*)(&type)) 

int main() 
{ 
    printf("Size of int %d \n",my_sizeof(int)); 

    return 0; 
} 

Однако при компиляции я получаю следующее сообщение об ошибке.

test.c:10:44: error: expected expression before ‘int’ 
    printf("Size of int %d \n",my_sizeof(int)); 
              ^
test.c:5:35: note: in definition of macro ‘my_sizeof’ 
#define my_sizeof(type) ((char*)(&type + 1)-(char*)(&type)) 
           ^
test.c:10:44: error: expected expression before ‘int’ 
    printf("Size of int %d \n",my_sizeof(int)); 
              ^
test.c:5:54: note: in definition of macro ‘my_sizeof’ 
#define my_sizeof(type) ((char*)(&type + 1)-(char*)(&type)) 
                ^
+2

Это расширяется '((символ *) (& ИНТ + 1) - (символ *) (& целое))' Что такое адрес междунар ? Beats me ... – John3136

ответ

3
((char*)(&int + 1)-(char*)(&int)) 

Ваш макрос пытается получить адрес типа. Вы можете сделать макрос намного дольше, включив в него целый блок с локальной переменной (но тогда макрос не будет работать так, как вы хотите) или просто используйте макрос только для переменных, а не для типов.

+0

ах я получаю это :) спасибо – liv2hak

2

Это работает для типов, но не для переменных:

#define tsizeof(type) (((char *)(1+((type *)0))) - ((char *)((type *)0))) 
Смежные вопросы