#if সংজ্ঞায়িত (WIN32) এবং #ifdef (WIN32) এর মধ্যে পার্থক্য


116

আমি আমার প্রোগ্রামটি সংকলন করছি যা লিনাক্স জিসিসি 4.4.1 সি 99 এ চলবে।

উইন্ডো বা লিনাক্স উভয় ক্ষেত্রেই সংকলন করা কোডটি পৃথক করতে আমি কেবল আমার # সংজ্ঞাগুলি রেখেছিলাম। যাইহোক, আমি এই ত্রুটি পেয়েছি।

error: macro names must be identifiers.

এই কোড ব্যবহার করে

#ifdef(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif

যাইহোক, আমি যখন এটিতে পরিবর্তন করেছি ত্রুটিটি ঠিক করা হয়েছিল:

#if defined(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif

আমি কেবল ভাবছিলাম যে আমি কেন ত্রুটি পেয়েছি এবং কেন # সংজ্ঞাটি আলাদা?

অনেক ধন্যবাদ,

উত্তর:


161

আপনি যদি #ifdef সিনট্যাক্স ব্যবহার করেন তবে বন্ধনীগুলি সরিয়ে ফেলুন।

উভয়ের মধ্যে পার্থক্য হ'ল #ifdefকেবলমাত্র একটি একক শর্ত ব্যবহার করতে পারে ,
যখন #if defined(NAME)যৌগিক শর্তসাপেক্ষ করতে পারে।

উদাহরণস্বরূপ আপনার ক্ষেত্রে:

#if defined(WIN32) && !defined(UNIX)
/* Do windows stuff */
#elif defined(UNIX) && !defined(WIN32)
/* Do linux stuff */
#else
/* Error, both can't be defined or undefined same time */
#endif

2
হ্যাঁ, তবে আপনি # আইডিআইপি ইউএনএক্সকে # আইফেন্ডাফ উইন 32 দিয়েও ক্যাসকেড করতে পারবেন এবং একই নমনীয়তাটি (পড়ার মতো নয়, আমি সম্মত নই)
— jpinto3912

2
@ jpinto3912 তবে এটি আরও চুলচেরা হয়ে যায়||
— 18-18 তারিখে এইডিয়াকাপি

যদি কেবল তারা #if defined(NAME)শুরু থেকেই সাথে থাকে এবং কোনও #ifdefবিবৃতি তৈরি করা এড়ানো যায় ।
— অ্যান্ডি

51
#ifdef FOO

এবং

#if defined(FOO)

সব একই,

তবে একবারে বেশ কয়েকটি কাজ করার জন্য আপনি সংজ্ঞায়িত, পছন্দ মতো ব্যবহার করতে পারেন

#if defined(FOO) || defined(BAR)

28

#ifdefএই নামের দ্বারা কোনও ম্যাক্রো সংজ্ঞায়িত করা হয়েছে কিনা তা যাচাই #ifকরে, অভিব্যক্তিটি মূল্যায়ন করে এবং সত্য মানের জন্য পরীক্ষা করে

#define FOO 1
#define BAR 0

#ifdef FOO
#ifdef BAR
/* this will be compiled */
#endif
#endif

#if BAR
/* this won't */
#endif

#if FOO || BAR
/* this will */
#endif

13
এটি প্রশ্নের উত্তর দেয় না। প্রশ্নটি #if definedএবং এর মধ্যে পার্থক্যের জন্য জিজ্ঞাসা করে #ifdef।
— হাসান নাদিম

1
#FOO এবং #if সংজ্ঞায়িত (FOO) কীভাবে আলাদা আচরণ করতে পারে তার এটি সর্বোত্তম ব্যাখ্যা।
— পল বেস্টেরিয়েন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.