এটি একটি জবাব দিয়েছি যা আমি একটি বর্তমান প্রশ্নের উত্তর দিয়েছি যা সি এর জন্য জেনেরিকস লাইব্রেরি সম্পর্কে জিজ্ঞাসা করে - প্রশ্নকারী নির্দিষ্টভাবে বলে যে তারা সি ++ ব্যবহার করতে চায় না।
সি একটি সম্পূর্ণ প্রোগ্রামিং ভাষা। সি সি ++ এর একটি স্বেচ্ছাসেবী সাবসেট নয়। সি মোটেও সি ++ এর উপসেট নয়।
এটি বৈধ সি:
foo_t* foo = malloc ( sizeof(foo_t) );
এটি সি ++ হিসাবে সংকলন করতে আপনাকে লিখতে হবে:
foo_t* foo = static_cast<foo_t*>( malloc ( sizeof(foo_t) ) );
যা আর সি বৈধ নয়। (আপনি সি-স্টাইলের castালাই ব্যবহার করতে পারেন, এটি সি-তে সংকলন করবে তবে বেশিরভাগ সি ++ কোডিং মান এবং অনেক সি প্রোগ্রামার দ্বারা এড়িয়ে চলা হবে; পুরো স্ট্যাক ওভারফ্লোতে "কাস্ট ম্যালোক কাস্ট করবেন না" দেখুন) ।
এগুলি একই ভাষা নয় এবং সিতে আপনার যদি কোনও বিদ্যমান প্রকল্প থাকে তবে আপনি কেবল একটি লাইব্রেরি ব্যবহারের জন্য এটি অন্য ভাষায় পুনর্লিখন করতে চান না। আপনি যে ভাষাগুলিতে কাজ করছেন তার মধ্যে আপনি যে লাইব্রেরি ইন্টারফেস করতে পারবেন সেগুলি পছন্দ করতে পছন্দ করবেন ((কিছু ক্ষেত্রে extern "C"
টেম্পলেট / ইনলাইন সি ++ লাইব্রেরি কীভাবে হয় তার উপর নির্ভর করে কয়েকটি র্যাপার ফাংশন দিয়ে এটি সম্ভব ))
আমি যে প্রকল্পে কাজ করছি তাতে প্রথম সি ফাইল নেওয়া, আপনি যদি কেবলমাত্র এটির gcc std=c99
জন্য পরিবর্তন করেন তবে এটি ঘটে g++
:
sandiego:$ g++ -g -O1 -pedantic -mfpmath=sse -DUSE_SSE2 -DUSE_XMM3 -I src/core -L /usr/lib -DARCH=elf64 -D_BSD_SOURCE -DPOSIX -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112L -Wall -Wextra -Wwrite-strings -Wredundant-decls -Werror -Isrc src/core/kin_object.c -c -o obj/kin_object.o | wc -l
In file included from src/core/kin_object.c:22:
src/core/kin_object.h:791:28: error: anonymous variadic macros were introduced in C99
In file included from src/core/kin_object.c:26:
src/core/kin_log.h:42:42: error: anonymous variadic macros were introduced in C99
src/core/kin_log.h:94:29: error: anonymous variadic macros were introduced in C99
...
cc1plus: warnings being treated as errors
src/core/kin_object.c:101: error: ISO C++ does not support the ‘z’ printf length modifier
..
src/core/kin_object.c:160: error: invalid conversion from ‘void*’ to ‘kin_object_t*’
..
src/core/kin_object.c:227: error: unused parameter ‘restrict’
..
src/core/kin_object.c:271: error: ISO C++ does not support the ‘z’ printf length modifier
src/core/kin_object.c:271: error: ISO C++ does not support the ‘z’ printf length modifier
ত্রুটিগুলির মোট 69 লাইনগুলিতে, এর মধ্যে চারটি অবৈধ রূপান্তর, তবে বেশিরভাগ বৈশিষ্ট্যগুলির জন্য যা C99 তে বিদ্যমান তবে সি ++ তে নেই।
এটি এমন নয় যে আমি এই বৈশিষ্ট্যগুলি মজাদার জন্য ব্যবহার করছি। এটি অন্য ভাষায় পোর্ট করতে গুরুত্বপূর্ণ কাজ লাগবে।
সুতরাং এটি প্রস্তাব দেওয়া সহজ ভুল
[একটি] সি সংকলক প্রায় অবশ্যই সত্যই একটি সি ++ সংকলক, তাই কোনও সফ্টওয়্যার ব্যয় জড়িত নেই
সি সি ++ এর পদ্ধতিগত উপসেটটিতে বিদ্যমান সি কোডটি পোর্ট করার ক্ষেত্রে প্রায়শই উল্লেখযোগ্য ব্যয় জড়িত থাকে।
সুতরাং সিতে একটি লাইনের লাইব্রেরি প্রয়োগের সন্ধানের প্রশ্নের উত্তর হিসাবে 'সি ++ এসটিডি :: কিউ ক্লাস ব্যবহার' করার পরামর্শ দেওয়ার পরে 'উদ্দেশ্য সি ব্যবহার করুন' এবং 'জাভা জাভা.ইটিল.কুইউ ক্লাসটি জেএনআই ব্যবহার করে ' কল করার পরামর্শ দেওয়া হবে না d বা 'সিপিথন লাইব্রেরি কল করুন' - উদ্দেশ্য সি আসলে সি এর যথাযথ সুপারসেট (সি 99 সহ), এবং জাভা এবং সিপাইথন লাইব্রেরি উভয়ই সি ++ ভাষার সাথে সম্পর্কযুক্ত কোড পোর্ট না করেই সি থেকে সরাসরি কলযোগ্য।
অবশ্যই আপনি সি ++ লাইব্রেরিতে একটি সি ফ্যাড সরবরাহ করতে পারেন, তবে একবার আপনি এটি করেন যে সি ++ জাভা বা পাইথনের থেকে আলাদা নয়।