مشکل در تعریف پیش پردازنده در زبان سی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مشکل در تعریف پیش پردازنده در زبان سی

0 امتیاز

در کد زیر ماکرو رو تعریف کردم که دو عدد می گیره و عدد بزرگتر رو بر می گردونه مشکلی که دارم اینه که وقتی ماکرو kprint رو تعریف کردم دیگه برنامه درست کار نمی کنه و خروجی زیر رو می ده :

40

40

Kave

من متوجه نشدم که مشکل از کجاست میشه راهنمایی کنید.

سوال دومم هم در مورد تابع printf هست که چرا در ماکرو ها اینطوری تعریف میشه ؟

سوالم اینه که آیا اصولا تعریف ها در ماکرو و بدنه ی اصلی توابع متفاوتن؟

تشکر.

 

#include<stdio.h>

#define BIG(NUM1,NUM2)  NUM1 >= NUM2 ? NUM1 : NUM2 

#define kprint( name ) \
	printf ( "%s" #name "\n" )

int main ( void ) {
	printf ( "%d\n" , BIG(40 , 20 ) ) ;
	kprint(kave) ;
	return 0 ;
}

 

سوال شده تیر 21, 1394  بوسیله ی Kmoh (امتیاز 18)   3 4 5

1 پاسخ

+1 امتیاز

اولاً شما نوع داده ای kave را مشخص نکردید undefined behavior هستش .

دوما نحوه استفاده شما از printf صحسیح نیست.

کد شما به صورت زیر اصلاح شد.

#include<stdio.h>

#define BIG(NUM1,NUM2)  NUM1 >= NUM2 ? NUM1 : NUM2 

#define kprint( name ) \
	printf("%s\n" ,name )

int main(void) {
	printf("%d\n", BIG(40, 20));
	kprint("kave");
	return 0;
}

 

پاسخ داده شده تیر 26, 1394 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
...