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.
#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;
bir de casting ile
int x = 100;
int *ptr = (int *)(int)x;
şeklinde deneyebilir misiniz?
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;
}
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;
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
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
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ı.
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)
eminmisiniz derken bir onceki satirda ; eksiktir yada baska bir warning, yada error vardir once/sonra filan diye sordum
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?
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.
hocam aksam daha ayrintili bakarim
Değişkenin başına & koymaniz gerekmiyor mu?
Pardon degiskenin içeriği kısmına dikkat etmemişim
bende ac6 ile deneyeyim aclipse+gcc kullanıyor.
Doğrudan derledi (warning verdi.)