Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => Konuyu başlatan: Klein - 20 Ocak 2017, 10:18:59

Başlık: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: Klein - 20 Ocak 2017, 10:18:59
işaretçiye adres değeri olarak bir değişkenin içeriğini geçmek istiyorum. fakat GCC kızıyor. C++ ile yapabiliyordum ama GCC yapmıyor. Embitz kullanıyorum.

int x = 100;
int *ptr  = (int)x;

şeklindeki atamaya

error: initializer element is not constant

hatası veriyor. Değişken içeriğini adres değeri olarak kabul etmiyor. Kendince haklı. Çok tehlikeli bir operasyon. Hata vermektense warning vermesini beklerdim.

eğer değişken yerine sabit kullanırsam sorun yok.

int *ptr  = (int)100;

Bu şekilde sorunsuz derleniyor ve çalışıyor.

Bu hatayı kapatacak derleyici direktifi veya yöntem arıyorum.

Not: Çeşit çeşit casting denedim. Hatta iç içe castingler oluşturdum ama nafile.
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: superconductor - 20 Ocak 2017, 10:38:23
#include <stdio.h>

int main()
{
int x = 100;
int *ptr = x;

printf("gcc version: %d.%d.%d\n",__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__);
return 0;
}


gcc version: 5.4.0

Uyarı ile derliyor: asd.c:6:13: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
  int *ptr = x;


Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: Klein - 20 Ocak 2017, 10:51:25
bir de casting ile
int x = 100;
int *ptr = (int *)(int)x;

şeklinde deneyebilir misiniz?
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: mufitsozen - 20 Ocak 2017, 11:06:28
Alıntı yapılan: Klein - 20 Ocak 2017, 10:18:59
işaretçiye adres değeri olarak bir değişkenin içeriğini geçmek istiyorum. fakat GCC kızıyor. C++ ile yapabiliyordum ama GCC yapmıyor. Embitz kullanıyorum.

int x = 100;
int *ptr  = (int)x;

şeklindeki atamaya

error: initializer element is not constant

hatası veriyor. Değişken içeriğini adres değeri olarak kabul etmiyor. Kendince haklı. Çok tehlikeli bir operasyon. Hata vermektense warning vermesini beklerdim.

eğer değişken yerine sabit kullanırsam sorun yok.

int *ptr  = (int)100;

Bu şekilde sorunsuz derleniyor ve çalışıyor.

Bu hatayı kapatacak derleyici direktifi veya yöntem arıyorum.

Not: Çeşit çeşit casting denedim. Hatta iç içe castingler oluşturdum ama nafile.

ptr degerini basta initialize ettigniz icin sabit degil diyor, asagidaki gibi yapiniz.



#include <stdio.h>

int main() {
    int x = 100;
   
   
   int *ptr;
   
   ptr = (int *)x;


    printf("\n x=%d,  ptr=%d \n", x, (int)ptr);

   // your code goes here
   return 0;
}
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: superconductor - 20 Ocak 2017, 11:07:39
Böyle hocam:

asd.c:6:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  int *ptr = (int *)(int)x;
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: mufitsozen - 20 Ocak 2017, 11:09:29
error: initializer element is not constant hatasi derleme sirasinda icerigin belirlenememesinden kaynaklaniyor. diyecektim ama GCC benden akilli tabiiki

   int *ptr= (int *)x; yazincada calisiyor  ;D
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: Klein - 20 Ocak 2017, 11:20:52
Yok hocam. Örnek kolay olsun diye init aşamasında yaptım aktarmayı. Nerede yaparsam yapayım derleme hatası alıyorum.

ARM GCC Compiler (EmBitz-Bare-Metal)

gcc version: 5.4.1

Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: Klein - 20 Ocak 2017, 11:23:53
warning - error ayarlarına baktım ama göremedim bunula ilgili bir opsiyon.

C standartı Iso9899:2011  seçili  C99, C98 ne bulduysam denedim.  aynı.
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: mufitsozen - 20 Ocak 2017, 11:34:27
Alıntı yapılan: Klein - 20 Ocak 2017, 11:23:53
warning - error ayarlarına baktım ama göremedim bunula ilgili bir opsiyon.

C standartı Iso9899:2011  seçili  C99, C98 ne bulduysam denedim.  aynı.

Hocam eminmisiniz bende GCC ile denedim (internetdeki bir online compiler ile prb yok)
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: mufitsozen - 20 Ocak 2017, 11:36:10
eminmisiniz derken bir onceki satirda ; eksiktir yada baska bir warning, yada error vardir once/sonra filan diye sordum

Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: Klein - 20 Ocak 2017, 11:37:58
Eminim hocam.
Coocox ile denedim. O da GCC kullanıyor ama farklı bir sürüm. O da aynı hatayı veriyor.

Birazdan keil kurup deneyeceğim.

Değişkeni kullanmadıysanız  optimize edip hiç derlemiyor olabilir mi?
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: Klein - 20 Ocak 2017, 11:43:31
Hocam az önce online derleyici ile ben de denedim.

durum aynı.
prog.c:4:1: error: initializer element is not constant

Derleyici olarak c++ seçersem sorunsuz derleniyor.
C++ ile derlemede sorun yoktu zaten.
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: mufitsozen - 20 Ocak 2017, 12:12:26
hocam aksam daha ayrintili bakarim
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: serdararikan - 20 Ocak 2017, 12:20:54
Değişkenin başına & koymaniz gerekmiyor mu?

Pardon degiskenin içeriği kısmına dikkat etmemişim
Başlık: Ynt: Değişken içeriğini Adres olarak işaretçiye geçmek.
Gönderen: muhittin_kaplan - 20 Ocak 2017, 14:57:40
bende ac6 ile deneyeyim aclipse+gcc kullanıyor.

Doğrudan derledi (warning verdi.)