আমি যখনই ম্যালোক ব্যবহার করি তখন কেন আমি একটি সতর্কতা পাই?


110

যদি আমি mallocআমার কোড ব্যবহার করি:

int *x = malloc(sizeof(int));

আমি এই সতর্কতা থেকে পেয়েছি gcc:

new.c:7: warning: implicit declaration of function malloc  
new.c:7: warning: incompatible implicit declaration of built-in function malloc

উত্তর:


224

আপনাকে যুক্ত করতে হবে:

#include <stdlib.h>

এই ফাইলটি অন্তর্নির্মিত কার্যের জন্য ঘোষণা অন্তর্ভুক্ত করে malloc। আপনি যদি এটি না করেন তবে সংকলকটি মনে করে যে আপনি নিজের নামের সাথে নিজের ফাংশনটি সংজ্ঞায়িত করতে চান mallocএবং এটি আপনাকে সতর্ক করে কারণ:

  1. আপনি স্পষ্টভাবে এটি ঘোষণা করবেন না এবং
  2. ইতিমধ্যে এই নামে একটি অন্তর্নির্মিত ফাংশন রয়েছে যা স্পষ্টভাবে ঘোষিত হওয়াটির চেয়ে আলাদা স্বাক্ষর রয়েছে (যখন কোনও ফাংশন স্পষ্টভাবে ঘোষণা করা হয়, তখন তার রিটার্ন এবং আর্গুমেন্টের ধরনগুলি ধরে নেওয়া হয় intযা বিল্ট- এর সাথে সামঞ্জস্যপূর্ণ নয়) ইন malloc, যা একটি নেয় size_tএবং রিটার্ন দেয় a void*)।

5
পরিভাষা নীট: সি-তে বিল্ট-ইন ফাংশন বলে কোনও জিনিস নেই কেবল স্ট্যান্ডার্ড সি লাইব্রেরির একটি ফাংশন ll
জেনস

5
@ জেনস আমি প্রমিত লাইব্রেরি ফাংশনগুলিকে বিল্ট-ইন হিসাবে উল্লেখ করার ক্ষেত্রে কোনও সমস্যা দেখছি না - এবং ত্রুটি বার্তাটি "বিল্ট-ইন" শব্দটি ব্যবহার করার পরেও জিসিসি লোকেরা দৃশ্যত দেখতে পাচ্ছে না (সে কারণেই আমি করেছি)।
sepp2k

7
@ sepp2k আচ্ছা, আমি কি করতে কোন সমস্যা দেখেন। ব্যবহারটি মানহীন। সংকলকগুলির অন্তর্নির্মিত ফাংশন থাকতে পারে এবং জিসিসিতে অন্তর্নির্মিত থাকতে পারে। তবে আমি যেমন লিখেছি, সি তে কোনও বিল্ট-ইন ফাংশন নেই।
জেনস


16

ফাংশনটি ঘোষণা করে এমন হেডার ফাইলটি আপনাকে অন্তর্ভুক্ত করতে হবে, উদাহরণস্বরূপ:

#include <stdlib.h>

আপনি যদি এই শিরোলেখ ফাইলটি অন্তর্ভুক্ত না করেন তবে ফাংশনটি সংকলকটির কাছে জানা নেই। সুতরাং এটি এটিকে অঘোষিত হিসাবে দেখে।


10

সাহায্যে আপনার ফাংশনগুলি সন্ধান করার অভ্যাস করুন।

সি জন্য সর্বাধিক সহায়তা ইউনিক্স ম্যানুয়াল পৃষ্ঠাগুলিতে মডেল করা হয়।

ব্যবহার :

man malloc

বেশ কার্যকর ফলাফল দেয়।

গুগলিং man mallocআপনাকে বোঝাতে চাইবে আমি কী বোঝাতে চাইছি।

ইউনিক্সে আপনি সম্পর্কিত বিষয়গুলির জন্য এপ্রোপোস পান।


1
আপনি যদি ইতিমধ্যে জেনে থাকেন যে #include <stdlib.h>সাইনোপসিসের রেখার অর্থ আপনার প্রোগ্রামে আপনাকে এটি লিখতে হবে।
যান্ত্রিক শামুক

1
যদি এখানে অন্য উত্তরগুলি কেউ পড়ে থাকে তবে তারা এখন তা জানতে পারবে।
মাইককুলস

0

অন্যান্য খুব ভাল উত্তরের পাশাপাশি, আমি কিছুটা নিটপিক করতে চাই এবং অন্যান্য উত্তরে এখনও আলোচিত নয় এমন কিছু কভার করতে চাই।


আপনি লিনাক্স এ থাকা অবস্থায়, malloc()আপনার কোডটি ব্যবহার করতে ,

আপনার আসলে দরকার নেই #include <stdlib.h>

(যদিও এটি ব্যবহার stdlib.hখুব সাধারণ এবং সম্ভবত প্রতিটি খেলনাবিহীন প্রোগ্রামে এটি যেভাবেই অন্তর্ভুক্ত করা উচিত কারণ এটি দরকারী সি স্ট্যান্ডার্ড লাইব্রেরি ফাংশন এবং ম্যাক্রোগুলির বিস্তৃত পরিসীমা সরবরাহ করে)

আপনি #include <malloc.h>পরিবর্তে পারে ।

তবে দয়া করে মনে রাখবেন যে এর ব্যবহারটি malloc.hঅবচিত হয়ে গেছে এবং এটি আপনার কোডটিকে অ-বহনযোগ্য করে তোলে। আপনি যদি ব্যবহার করতে চান তবে আপনার malloc()সর্বদা এবং সর্বদা হওয়া উচিত (অন্যথায় স্পষ্ট কারণ ব্যতীত) #include <stdlib.h>

কারণ কেন , সেরা এই প্রশ্নের উত্তর ব্যাখ্যা করা হয়:

<stdlib.h> এবং <malloc.h> এর মধ্যে পার্থক্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.