keilde değişken türleri

Başlatan interrupter, 01 Ocak 2014, 20:52:53

interrupter

merhaba arkadaşlar bilgili arkadaşlardan keil de değişken tiplerini ve yapılarını anlatabilecek varmı
örneğin  int  char  float  volatile  dizi vs vs bunlar hakkında bilgisi olan var mı?

fgokcegoz

Bu değişken türleri keil a ait değildir. C/C++ yazılım diline aittir. C/C++ ile ilgili hangi kitaba baksan, istediğin bilgiyi elde edersin...(Hiç olmadı keil ın help kısmından incelersin.) Armut piş, ağzıma düş tarzında bilgi edinme akıllı insanların bilgi edinme tarzı değildir.
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

Tagli

Eğer destekleniyorsa, bence uint8_t gibi türleri kullanmak daha güvenli. Olası karışıklıkların (özellikle de mimari değişirse) önüne geçilmesinde faydalı olacaktır.
Gökçe Tağlıoğlu

Erhan YILMAZ

Bir çok derleyici kendi kafasına göre değişken tipleri belirliyor. Mesela ccs c'de byte var diğerlerinde olmayabiliyor. Aslında çoğu bir biri ile uyumlu ama bazen sorunlar çıkabiliyor. Bunun için kendi değişken tiplerinizi belirlemekte fayda var. Elm chan'ın kodlarında görmüştüm. uint16_t, uint8_t, uchar,gibi değişkenler kullanıyordu. Bunları kullanmayan derleyiciler içinde typdef ile yaptığı bir kaç tanımlama ile kütüphanelerini uyumlu hale getiriyordu.
örneğin;
typedef unsigned char uint8_t; yani işaretsiz 8 bit sayı bildiğiniz byte. En sondaki t ne onu anlamadım. Bu tanımlamaları yaparken kullanacağınız derleyicinin referans manueline bakıp değişkenlerin değer aralıklarına dikkat etmek gerekiyor tabi.

Tagli

Alıntı yapılan: Erhan YILMAZ - 02 Ocak 2014, 01:02:05
En sondaki t ne onu anlamadım.
Type'ın kısaltması. Bir tür tanımlandığında kullanılan genel kabul görmüş bir isimlendirme şeklidir. uint8_t'nin bir değişken türü olduğu açıkça belli olsun diye o şekilde isimlendirmeyi tercih etmişler. Genelde struct isimlerinde de kullanılıyor ama benim elim pek alışmadı maalesef.
Gökçe Tağlıoğlu

Erhan YILMAZ

Hmm biz kendimiz tanımladık derleyicinin kendi öz değişkeni değil anlamında yani. _t takısı kullanılmazsa aynı değişkenler çakışabilir onu önlemek için olabilir. Kütüphaneninizi oluştururken Typedef.h isimli bir header içine kendi tanımladığınız değişkenleri yazmak kullanışlı bir yöntem. Şimdi hatırladım elm chanda integer.h diye bir dosya tanımlamıştı. _t takısına da önem vermemiş. İçeriği aşağıda.

/*-------------------------------------------*/
/* Integer type definitions for FatFs module */
/*-------------------------------------------*/

#ifndef _INTEGER
#define _INTEGER

#ifdef _WIN32	/* FatFs development platform */

#include <windows.h>
#include <tchar.h>

#else			/* Embedded platform */

/* These types must be 16-bit, 32-bit or larger integer */
typedef int				INT;
typedef unsigned int	UINT;

/* These types must be 8-bit integer */
typedef char			CHAR;
typedef unsigned char	UCHAR;
typedef unsigned char	BYTE;

/* These types must be 16-bit integer */
typedef short			SHORT;
typedef unsigned short	USHORT;
typedef unsigned short	WORD;
typedef unsigned short	WCHAR;

/* These types must be 32-bit integer */
typedef long			LONG;
typedef unsigned long	ULONG;
typedef unsigned long	DWORD;

#endif

#endif

Gökhan BEKEN

#6
O halde aşağıdaki gibi kullanabiliriz:
typedef signed char 	int8_t;
typedef unsigned char 	uint8_t;

typedef signed short 	int16_t;
typedef unsigned short	uint16_t;

typedef signed int 	int32_t; 	//typedef signed long int 	int32_t
typedef unsigned int 	uint32_t;	//typedef unsigned long int 	uint32_t

typedef signed long long int	int64_t;
typedef unsigned long long int 	uint64_t;

typedef float	real32_t;
typedef double	real64_t;

keil'da kontrol ettim,
signed float, unsigned float, signed doule, unsigned double şeklinde türler yok.

Bu arada, aklıma takılıyor:
Değişken türleri için neden isim kullanmışlar, direkt kaç byte'lık olduğunu belirtse idik bence çok daha kullanışlı olur ve bütün platformlarda aynı şeyi konuşmuş olurduk. C dilinde bana mantıksız gelen tek şey bu.


mesaj birleştirme:: 12 Ocak 2014, 01:59:55

Yeni birşey keşfettim
C:\Program Files (x86)\Keil\ARM\ARMCC\include\stdint.h
dosyasında bütün değişkenlerin sınırları yazıyor.
92. satırdan, 147. satıra kadar olan kısımda görebilirsiniz.

bahsettiğim satırlar burada:
    /* minimum values of exact-width signed integer types */
#define INT8_MIN                   -128
#define INT16_MIN                -32768
#define INT32_MIN          (~0x7fffffff)   /* -2147483648 is unsigned */
#define INT64_MIN  __ESCAPE__(~0x7fffffffffffffffll) /* -9223372036854775808 is unsigned */

    /* maximum values of exact-width signed integer types */
#define INT8_MAX                    127
#define INT16_MAX                 32767
#define INT32_MAX            2147483647
#define INT64_MAX  __ESCAPE__(9223372036854775807ll)

    /* maximum values of exact-width unsigned integer types */
#define UINT8_MAX                   255
#define UINT16_MAX                65535
#define UINT32_MAX           4294967295u
#define UINT64_MAX __ESCAPE__(18446744073709551615ull)

    /* 7.18.2.2 */

    /* minimum values of minimum-width signed integer types */
#define INT_LEAST8_MIN                   -128
#define INT_LEAST16_MIN                -32768
#define INT_LEAST32_MIN          (~0x7fffffff)
#define INT_LEAST64_MIN  __ESCAPE__(~0x7fffffffffffffffll)

    /* maximum values of minimum-width signed integer types */
#define INT_LEAST8_MAX                    127
#define INT_LEAST16_MAX                 32767
#define INT_LEAST32_MAX            2147483647
#define INT_LEAST64_MAX  __ESCAPE__(9223372036854775807ll)

    /* maximum values of minimum-width unsigned integer types */
#define UINT_LEAST8_MAX                   255
#define UINT_LEAST16_MAX                65535
#define UINT_LEAST32_MAX           4294967295u
#define UINT_LEAST64_MAX __ESCAPE__(18446744073709551615ull)

    /* 7.18.2.3 */

    /* minimum values of fastest minimum-width signed integer types */
#define INT_FAST8_MIN           (~0x7fffffff)
#define INT_FAST16_MIN          (~0x7fffffff)
#define INT_FAST32_MIN          (~0x7fffffff)
#define INT_FAST64_MIN  __ESCAPE__(~0x7fffffffffffffffll)

    /* maximum values of fastest minimum-width signed integer types */
#define INT_FAST8_MAX             2147483647
#define INT_FAST16_MAX            2147483647
#define INT_FAST32_MAX            2147483647
#define INT_FAST64_MAX  __ESCAPE__(9223372036854775807ll)

    /* maximum values of fastest minimum-width unsigned integer types */
#define UINT_FAST8_MAX            4294967295u
#define UINT_FAST16_MAX           4294967295u
#define UINT_FAST32_MAX           4294967295u
#define UINT_FAST64_MAX __ESCAPE__(18446744073709551615ull)

Özel mesaj okumuyorum, lütfen göndermeyin.

z

Alıntı YapBu arada, aklıma takılıyor:
Değişken türleri için neden isim kullanmışlar, direkt kaç byte'lık olduğunu belirtse idik bence çok daha kullanışlı olur ve bütün platformlarda aynı şeyi konuşmuş olurduk. C dilinde bana mantıksız gelen tek şey bu.

Cok mantikli

U1  unsigned char demek
U2  unsigned short demek
U4  unsigned int demek

S1  signed char demek
S2  signed short demek
S4  signed int demek

Boyle bir tanim yapip bu sekilde yayginlastirabilirlermis.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com