الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إيجاد حجم الأنواع الأوليه على الماكينه/المترجم الخاص بك

بدأه mhewedy في 31 أغسطس 2010 · 7 رد · 477 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

وجدت في أحد الكتب هذه الطريقة لإيجاد حجم الأنواع الأوليه لئلا نقوم بعمل إفتراضات خاطئة..........

/**
* @date 31/08/2010
* get_types_bits.c
*/

#include <stdio.h>

int int_bits();
int short_bits();
int long_bits();
int long_long_bits();
int char_bits();

int main(void)
{   
	printf("%i %i %i %i %i\n",char_bits(), short_bits(), int_bits(), long_bits(), long_long_bits());

	return 0;
}

int int_bits()
{
	unsigned int x = ~0;
	int c=0;

	while (x>0)
	{
	x>>=1;
	c++;
	}
	return c;
}

int short_bits()
{
	unsigned short int x = ~0;
	int c=0;

	while (x>0)
	{
	x>>=1;
	c++;
	}
	return c;
}

int long_bits()
{
	unsigned long int x = ~0;
	int c=0;

	while (x>0)
	{
	x>>=1;
	c++;
	}
	return c;
}

int long_long_bits()
{
	unsigned long long int x = ~0;
	int c=0;

	while (x>0)
	{
	x>>=1;
	c++;
	}
	return c;
}

int char_bits()
{
	unsigned char x = ~0;
	int c=0;

	while (x>0)
	{
	x>>=1;
	c++;
	}
	return c;
}

http://m-hewedy.blogspot.com/2010/08/portability-tip-how-to-know-size-of.html

#2

مالها sizeof() :huh:

name : mohamedyosry

#3

السلام عليكم ...

هكذا يمكن أن أقوم بالأمر:

#include <stdio.h>
#include <limits.h>

/* convert the passed parameter to textual representation */
#define STRING(identifer) (#identifer)
/* size of type in bits */
#define NUM_BITS(type) (CHAR_BIT*sizeof(type))

int main()
{
	printf("%-24s %s\n", "type name", "type size(bits)");
	printf("%-24s %d\n", STRING(char), NUM_BITS(char));
	printf("%-24s %d\n", STRING(short int), NUM_BITS(short int));
	printf("%-24s %d\n", STRING(int), NUM_BITS(int));
	printf("%-24s %d\n", STRING(long), NUM_BITS(long));
}

لاحظ أن مبرمجي C سيعترضون قائلين أنه من الخطأ استخدام d% مع sizeof لأنها تعيد النوع size_t, و لكن العتب ليس علي و إنما على دعم VC الضعيف للغة C و دعمها الرهيب للغة ++C :)

تحياتي...

1
#4
اقتباس
مالها sizeof()

موش عارف الصراحه.... بس الظاهر إني أخدتني الجلاله زياده عن اللازم (كنت بقرا فصل عن ال bit operations و كده:D)

@خالد.... متميز دائما أخي خالد...

#5

اذا اردت محمولية فى الطباعة (لا اعرف عن دعم VS لل modifier ةلكن المصدر يخبر بانها من ansi c

How to portably print pointers and size_t values - Linux

تم تعديل هذه المشاركة بواسطة apex في 31 أغسطس 2010 في 19:54

name : mohamedyosry

#6
  #define STRING(identifer) (#identifer)

للتو أعرف فائدة # ، هل هذا Standard في اللغة :-) ؟

كنت شاهدته أول مرة في VS 2005 .

لكن لديه أشكال أعقد مثل :

#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name

؟

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

نعم standard فى اللغة

وهناك عدة اخوة لها منهم الConcatenation ب## بين العنصرين

1

name : mohamedyosry

#8

سينتج عن :

DECLARE_HANDLE(my_handle)

التالي:

struct my_handle__ { int unused; }; typedef struct my_handle__ *my_handle

مازلت أعتقد أن ال macros من أقوى المميزات في لغة السي

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…