#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.