#define satırında bunu yapmak mümkün mü ?

Başlatan magnetron, 17 Temmuz 2022, 21:33:31

magnetron

merhaba forum

AFI(void) diye bir fonksiyonum var bu PARAM1 değişkeni ile bir işlem yapıyor

bu fonksiyonu

#define AF(X) PARAM1 = (X);AFI();

satırıyla parametre gönderip çağırabilir miyim ?
yani #define satırındaki bu ifadeler doğru mu ?

AF(10) yazdığımda

PARAM1 = (10);AFI();

komut satırı çağırılsın istiyorum

GCC hata vermedi ama ben mantık olarak doğrumuyum sormak istedim

böyle bir şey çok kullanışlı olur bence

teşekkür


magnetron

yok çalışmadı (ama derlerken hata vermedi )

; noktalı virgüller #define satırını bitiriyor anladığım kadar

bunu yapmanın bir yolu var mı ?

mehmet

#2
{} parantezlerini kullanın.

#define AF(X) {PARAM1 = (X);AFI();}
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

ahmet35

#3
Ben #define AF(X) do { çalışacak kod } while(0) kullanmayı tercih ediyorum.

foseydon


ziyaretci

#5
Hazır konuyu görmüşken sormak istiyorum; bir dosya dizinini define edebiliyor muyuz?

Bir ara denemiştim ama becerememiştim.
Kastım;
#define proje_yolu "C:\proje"
#include <proje_yolu\xyz.c>

Derleyici CCS C

Örnek verebilirseniz memnun olurum.


mehmet

#6
Tanıtıcı sözcük yerine, tanımlanmış
ne varsa aktarılır. Standart C 'ye
özgü bir temel özelliktir.

https://www.kadifeli.com/fedon/stdcprtr.php?6_1#:~:text=%23define

Ek:
/*
 * test_01.c
 * https://stackoverflow.com/questions/2410976/how-to-define-a-string-literal-in-gcc-command-line#2411008
 */
#include <stdint.h>
#include <stdio.h>

#define STRINGIZE(x) #x
#define STRINGIZE_VALUE_OF(x) STRINGIZE(x)

int main(void)
{
    printf("%s\n\r", STRINGIZE_VALUE_OF(isim));
	return 0;
}

Alttaki şekilde derlendiğinde «isim» yerine "Mehmet"
yazacaktır.
gcc test_01.c -o test_01 -Disim='Mehmet'
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

Tagli

Çok satırlı makrolarda işin doğrusu @ahmet35 'in dediği şekilde yapmaktır.
Gökçe Tağlıoğlu

mehmet

#8
/*
 * test_01.c
 * https://stackoverflow.com/questions/2410976/how-to-define-a-string-literal-in-gcc-command-line#2411008
 */
#include <stdint.h>
#include <stdio.h>

#define STRINGIZE(x) #x
#define STRINGIZE_VALUE_OF(x) STRINGIZE(x)

#define yaz() { printf("%s\n\r", STRINGIZE_VALUE_OF(isim1));\
                 printf("%s\n\r", STRINGIZE_VALUE_OF(isim2));\
                 printf("%s\n\r", STRINGIZE_VALUE_OF(isim3));\
              }

int main(void)
{
     yaz()
    return 0;
}

gcc test_01.c -o test_01 -Disim1='Ali' -Disim2='Veli' -Disim3='Selami'
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"