আমার সংকলক (জিসিসি) আমাকে সতর্কতা দিচ্ছে:
সতর্কতা: ফাংশনের অন্তর্নিহিত ঘোষণা
কেন এটি আসছে তা বুঝতে দয়া করে আমাকে সহায়তা করুন।
আমার সংকলক (জিসিসি) আমাকে সতর্কতা দিচ্ছে:
সতর্কতা: ফাংশনের অন্তর্নিহিত ঘোষণা
কেন এটি আসছে তা বুঝতে দয়া করে আমাকে সহায়তা করুন।
উত্তর:
আপনি এমন একটি ফাংশন ব্যবহার করছেন যার জন্য সংকলক এখনও কোনও ঘোষণা (" প্রোটোটাইপ ") দেখেনি ।
উদাহরণ স্বরূপ:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
সরাসরি বা শিরোনামে আপনাকে প্রধান হিসাবে এর আগে আপনার ফাংশনটি ঘোষণা করতে হবে:
int fun(int x, char *p);
সঠিক উপায়টি শিরোনামে ফাংশন প্রোটোটাইপ ঘোষণা করা।
main.h
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
main.c
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
একটি ফাইলের সাথে বিকল্প (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
আপনি যখন মেইন.সি. তে আপনার # অন্তর্ভুক্ত করবেন তখন অন্তর্ভুক্ত তালিকার শীর্ষে রেফারেন্সড ফাংশনযুক্ত ফাইলটিতে # অন্তর্ভুক্ত রেফারেন্সটি রাখুন। উদাহরণস্বরূপ বলুন এটি মেন।
#include "SSD1306_LCD.h"
#include "system.h" #include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h> // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h" // This has the 'BYTE' type definition
উপরেরগুলি "ফাংশনটির অন্তর্নিহিত ঘোষণা" ত্রুটি উত্পন্ন করবে না, তবে নীচে হবে-
#include "system.h"
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h> // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h" // This has the 'BYTE' type definition
#include "SSD1306_LCD.h"
ঠিক একই # অন্তর্ভুক্ত তালিকা, ঠিক আলাদা অর্ডার।
ঠিক আছে, এটা আমার জন্য হয়েছে।
আপনি যখন error: implicit declaration of function
এটি পান তা আপত্তিজনক ফাংশন তালিকাভুক্ত করা উচিত। প্রায়শই এই ত্রুটিটি একটি ভুলে যাওয়া বা অনুপস্থিত শিরোলেখ ফাইলের কারণে ঘটে থাকে, সুতরাং শেল প্রম্পটে আপনি টাইপ করতে পারেন man 2 functionname
এবং SYNOPSIS
উপরের অংশটি দেখতে পারেন , কারণ এই বিভাগটি যে কোনও শিরোলেখ ফাইলকে অন্তর্ভুক্ত করার জন্য তালিকাবদ্ধ করবে। অথবা http://linux.die.net/man/ এ চেষ্টা করুন এটি হ'ল লিঙ্কযুক্ত এবং অনুসন্ধান করা সহজ এমন অনলাইন ম্যান পেজ। ফাংশনগুলি প্রায়শই শিরোনাম ফাইলগুলিতে সংজ্ঞায়িত করা হয়, কোনও প্রয়োজনীয় হেডার ফাইল সহ প্রায়শই উত্তর হয়। স্নিকুটারের মতো বলেছিলেন,
আপনি এমন একটি ফাংশন ব্যবহার করছেন যার জন্য সংকলক এখনও কোনও ঘোষণা ("প্রোটোটাইপ") দেখেনি।
আপনার যদি সঠিক শিরোনামগুলি সংজ্ঞায়িত করা থাকে এবং একটি অ GlibC
লাইব্রেরি ব্যবহার করছেন (যেমন মুসুল সি ) GNU এক্সটেনশানগুলির মুখোমুখি হওয়ার gcc
সময় নিক্ষেপ করবে ।error: implicit declaration of function
malloc_trim
সমাধানটি হ'ল এক্সটেনশন এবং শিরোলেখ মোড়ানো :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
আমি মনে করি যে প্রশ্নের উত্তর 100% নয়। আমি নিখোঁজ টাইফফ () নিয়ে সমস্যাটি অনুসন্ধান করছিলাম, যা সংকলনের সময় নির্দেশিকা।
নিম্নলিখিত লিঙ্কগুলি পরিস্থিতি সম্পর্কে আলোকপাত করবে:
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Typeof.html
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Alternate-Keywords.html#Alternate-Keywords
মতানুসারে __typeof__()
পরিবর্তে ব্যবহার করার চেষ্টা করুন । এছাড়াও gcc ... -Dtypeof=__typeof__ ...
সাহায্য করতে পারেন।