c ict একটি সংজ্ঞা এবং একটি ঘোষণা মধ্যে পার্থক্য কি?




ict প্রোগ্রামিং ভাষা (18)

একটি নির্বাহযোগ্য প্রজন্মের পর্যায়:

(1) প্রাক প্রসেসর -> (2) অনুবাদক / কম্পাইলার -> (3) সংযোগকারী

দ্বিতীয় পর্যায়ে (অনুবাদক / কম্পাইলার), আমাদের কোডে ঘোষণা বিবৃতি কম্পাইলারকে বলে যে আমরা এইসব জিনিস ভবিষ্যতে ব্যবহার করতে যাচ্ছি এবং আপনি পরে সংজ্ঞাটি সন্ধান করতে পারেন, অর্থাত্:

অনুবাদক নিশ্চিত যে: কি কি? ঘোষণা ঘোষণা

এবং (3) পর্যায় (লিঙ্কার) বিষয়গুলি বাঁধার সংজ্ঞা প্রয়োজন

সংযোগকারী নিশ্চিত যে: কোথায়? সংজ্ঞা মানে

উভয় অর্থ আমাকে eludes।


Answer #1

সংজ্ঞা প্রকৃত ফাংশন লিখিত এবং ঘোষণা মানে উদাহরণস্বরূপ সহজ ঘোষণা ফাংশন মানে

void  myfunction(); //this is simple declaration

এবং

void myfunction()
{
 some statement;    
}

এই ফাংশন myfunction সংজ্ঞা


Answer #2

ঘোষণা: "কোথাও, একটি foo বিদ্যমান।"

সংজ্ঞা: "... এবং এখানে এটি!"


Answer #3

একটি ঘোষণা কম্পাইলার একটি প্রতীক নাম উপস্থাপন করে। একটি সংজ্ঞা একটি ঘোষণা যে প্রতীক জন্য স্থান বরাদ্দ করা হয়।

int f(int x); // function declaration (I know f exists)

int f(int x) { return 2*x; } // declaration and definition

Answer #4

আপনি সম্ভাব্য সর্বাধিক সাধারণ পদে বিবৃত করতে পারেন না, ঘোষণাটি একটি শনাক্তকারী যা কোনও স্টোরেজ বরাদ্দ করা হয় না এবং একটি সংজ্ঞা আসলে ঘোষিত শনাক্তকারীর কাছ থেকে সঞ্চয়স্থান বরাদ্দ করে?

একটি মজার চিন্তা - ক্লাস বা ফাংশনটি টাইপ তথ্যের সাথে সংযুক্ত না হওয়া পর্যন্ত টেমপ্লেট স্টোরেজ বরাদ্দ করতে পারে না। তাই টেমপ্লেট শনাক্তকারী একটি ঘোষণা বা সংজ্ঞা? কোনও স্টোরেজ বরাদ্দ হওয়ার পরে এটি ঘোষণা হওয়া উচিত এবং আপনি কেবল টেমপ্লেট শ্রেণী বা ফাংশনটির 'প্রোটোটাইপিং'।


Answer #5

C99 মান থেকে, 6.7 (5):

একটি ঘোষণা সনাক্তকারী একটি সেট ব্যাখ্যা এবং গুণাবলী উল্লেখ করে। একটি সনাক্তকারী একটি সংজ্ঞা যে শনাক্তকারী জন্য একটি ঘোষণা:

  • একটি বস্তুর জন্য, যে বস্তুর জন্য সংরক্ষণ করা স্টোরেজ কারণ;
  • একটি ফাংশন জন্য, ফাংশন শরীরের অন্তর্ভুক্ত;
  • একটি পরিমাপ ধ্রুবক বা টাইপডফ নামের জন্য, সনাক্তকারীর (কেবল) ঘোষণাটি।

সি ++ মান থেকে, 3.1 (2):

ঘোষণাপত্রটি একটি সংজ্ঞা নয়, যদি না এটি ফাংশন এর শরীর নির্দিষ্ট না করে একটি ফাংশন ঘোষণা করে তবে এটি বহির্মুখী স্পেসিফায়ার বা লিংক-স্পেসিফিকেশন এবং কোনও ইনিশিয়াইজার বা ফাংশন-শরীর নেই, এটি একটি বর্গ ঘোষণার স্ট্যাটিক ডেটা সদস্য ঘোষণা করে, এটি একটি ক্লাস নাম ঘোষণা, অথবা এটি একটি টাইপডফ ঘোষণা, একটি ব্যবহার-ঘোষণা, বা একটি ব্যবহার-নির্দেশিকা।

তারপর কিছু উদাহরণ আছে।

তাই আকর্ষণীয় (অথবা না, কিন্তু আমি একটু দ্বারা বিস্মিত), typedef int myint; C99 একটি সংজ্ঞা, কিন্তু সি ++ শুধুমাত্র একটি ঘোষণা।


Answer #6

চলতি নিয়ম:

  • একটি ঘোষণায় মেমরির ভেরিয়েবলের ডেটা ব্যাখ্যা করার জন্য কম্পাইলারকে বলে। এই প্রতিটি এক্সেস জন্য প্রয়োজন বোধ করা হয়।

  • একটি সংজ্ঞা পরিবর্তনশীল বিদ্যমান মেমরি সংরক্ষণ করে। এই প্রথম অ্যাক্সেস আগে ঠিক একবার ঘটতে হয়েছে।


Answer #7

জিএনইউ সি লাইব্রেরী ম্যানুয়াল অনুযায়ী ( http://www.gnu.org/software/libc/manual/html_node/Header-Files.html )

সি-তে, একটি ঘোষণা শুধুমাত্র তথ্য সরবরাহ করে যা একটি ফাংশন বা পরিবর্তনশীল বিদ্যমান এবং তার টাইপ দেয়। একটি ফাংশন ঘোষণা জন্য, তার আর্গুমেন্ট ধরনের সম্পর্কে তথ্য পাশাপাশি প্রদান করা যেতে পারে। ঘোষণার উদ্দেশ্য হল কম্পাইলার ঘোষিত ভেরিয়েবল এবং ফাংশনগুলির সঠিকভাবে রেফারেন্সগুলি প্রক্রিয়া করার অনুমতি দেওয়া। অন্যদিকে, একটি সংজ্ঞা, আসলে একটি পরিবর্তনশীল জন্য স্টোরেজ বরাদ্দ বা একটি ফাংশন কি বলে।


Answer #8

ঘোষণাপত্র এবং সংজ্ঞা ধারণাটি যখন আপনি এক্সটার্ন স্টোরেজ ক্লাসটি ব্যবহার করছেন তখন একটি পিটফল তৈরি করবে কারণ আপনার সংজ্ঞা অন্য কোনও স্থানে থাকবে এবং আপনি আপনার স্থানীয় কোড ফাইল (পৃষ্ঠা) এ পরিবর্তনশীল ঘোষণা করছেন। C এবং C ++ এর মধ্যে একটি পার্থক্য হল সিটিতে আপনি ঘোষণাগুলি একটি ফাংশন বা কোড পৃষ্ঠার শুরুতে সাধারণত সম্পন্ন হয়। সি ++ এ এটি এমন নয়। আপনি আপনার পছন্দের একটি জায়গায় ঘোষণা করতে পারেন।


Answer #9

এখানে অনুরূপ উত্তর খুঁজুন: সি প্রযুক্তিগত কৌশল সাক্ষাৎকার

একটি ঘোষণা প্রোগ্রামে একটি নাম প্রদান করে; একটি সংজ্ঞা প্রোগ্রামের মধ্যে একটি সত্তা একটি অনন্য বিবরণ (উদাহরণ টাইপ, উদাহরণ, এবং ফাংশন) প্রদান করে। ঘোষিত একটি নির্দিষ্ট সুযোগে পুনরাবৃত্তি করা যেতে পারে, এটি একটি নির্দিষ্ট সুযোগ একটি নাম প্রবর্তন করা হয়।

একটি ঘোষণা যদি না একটি সংজ্ঞা

  • ঘোষণাপত্রটি তার শরীর নির্দিষ্ট না করে একটি ফাংশন ঘোষণা করে,
  • ঘোষণা একটি বহির্মুখী স্পেসিফিকার এবং কোন প্রাথমিক বা ফাংশন শরীর রয়েছে,
  • ঘোষণাটি একটি বর্গ সংজ্ঞা ছাড়া স্ট্যাটিক ক্লাস ডেটা সদস্যের ঘোষণা,
  • ঘোষণা একটি বর্গ নাম সংজ্ঞা,

একটি সংজ্ঞা একটি ঘোষণা না হওয়া পর্যন্ত:

  • সংজ্ঞা একটি স্ট্যাটিক ক্লাস তথ্য সদস্য সংজ্ঞায়িত করে,
  • সংজ্ঞা একটি অ ইনলাইন সদস্য ফাংশন সংজ্ঞায়িত।

Answer #10

ঘোষণা মানে নাম এবং টাইপ একটি পরিবর্তনশীল (পরিবর্তনশীল ঘোষণা ক্ষেত্রে) উদাহরণস্বরূপ:

 int i;  

বা শরীর ছাড়া কোন ফাংশনে নাম, রিটার্ন টাইপ এবং প্যারামিটার (গুলি) টাইপ দিন (ফাংশন ঘোষণার ক্ষেত্রে)

উদাহরণ:

int max(int, int);

যেখানে সংজ্ঞা মানে একটি পরিবর্তনশীল মান নির্ধারণ করুন (পরিবর্তনশীল সংজ্ঞা ক্ষেত্রে)। উদাহরণ:

i = 20;

অথবা একটি ফাংশন শরীরের (কার্যকারিতা) যোগ / যোগ ফাংশন সংজ্ঞা বলা হয়।

উদাহরণ:

 int max(int a, int b)
 {
    if(a>b)   return a;
    return b;  
 }

অনেক সময় ঘোষণা এবং সংজ্ঞা একসাথে করা যেতে পারে:

int i=20;   

এবং

int max(int a, int b)
{
    if(a>b)   return a;
    return b;    
} 

উপরের ক্ষেত্রে আমরা সংজ্ঞা এবং ঘোষণা পরিবর্তনশীল আমি এবং ফাংশন সর্বোচ্চ ()


Answer #11

ঘোষণা:

int a; // this declares the variable 'a' which is of type 'int'

সুতরাং ঘোষণা একটি ধরনের সঙ্গে পরিবর্তনশীল সহযোগী।

নিম্নলিখিত ঘোষণার কিছু উদাহরণ।

int a;
float b;
double c;

এখন ঘোষণা ঘোষণা:

int fun(int a,int b); 

ফাংশনের শেষে সেমিকোলনটি লক্ষ্য করুন যাতে এটি কেবল ঘোষণা হয়। কম্পাইলার জানেন যে ফাংশন যে প্রোগ্রাম কোথাও যে প্রোটোটাইপ সঙ্গে সংজ্ঞায়িত করা হবে। এখন কম্পাইলার একটি ফাংশন কল এই মত কিছু পায়

int b=fun(x,y,z);

কম্পাইলার এই ধরনের কোন ফাংশন আছে বলে একটি ত্রুটি নিক্ষেপ করা হবে। এটি যে ফাংশন জন্য কোন প্রোটোটাইপ নেই কারণ।

দুটি প্রোগ্রামের মধ্যে পার্থক্য লক্ষ্য করুন।

প্রোগ্রাম 1

#include <stdio.h>
void print(int a)
{
     printf("%d",a);
}
main()
{
    print(5);
}

এই, মুদ্রণ ফাংশন ঘোষিত এবং পাশাপাশি সংজ্ঞায়িত করা হয়। যেহেতু ফাংশন কল সংজ্ঞা পর আসছে। এখন পরবর্তী প্রোগ্রাম দেখুন।

প্রোগ্রাম 2

 #include <stdio.h>
 void print(int a); // In this case this is essential
 main()
 {
    print(5);
 }
 void print(int a)
 {
     printf("%d",a);
 }

এটি অপরিহার্য কারণ ফাংশন কল সংজ্ঞার পূর্বে তাই কম্পাইলার অবশ্যই এমন কোনও ফাংশন আছে কিনা তা অবশ্যই জানা উচিত। তাই আমরা কম্পাইলার জানাতে হবে যে ফাংশন ঘোষণা।

সংজ্ঞা:

একটি ফাংশন সংজ্ঞায়িত এই অংশ সংজ্ঞা বলা হয়। এটা ফাংশন ভিতরে কি কি বলে।

void print(int a)
{
    printf("%d",a);
}

এখন ভেরিয়েবল সঙ্গে।

int a; //declaration
a=10; //definition 

কিছু বার ঘোষণা এবং সংজ্ঞা এই মত একটি একক বিবৃতিতে গ্রুপ করা হয়।

int a=10;

Answer #12

এই সত্যিই চর্বি শব্দ হবে, কিন্তু আমি আমার মাথা সরাসরি শর্ত রাখতে সক্ষম হয়েছে সবচেয়ে ভাল উপায়:

ঘোষণাপত্র: ছবি থমাস জেফারসনকে একটি বক্তৃতা দিচ্ছেন ... "আমি এখানে এই সোশ্যাল কোডের এই FOO EXISTS কে অস্বীকার করি!"

সংজ্ঞা: একটি অভিধান ছবি, আপনি Foo খুঁজছেন এবং এটি আসলে কি মানে।


Answer #13

সি ++ 11 আপডেট

যেহেতু আমি C ++ 11 এ প্রাসঙ্গিক একটি উত্তর দেখতে পাচ্ছি না এটি এখানে।

ঘোষণাটি একটি সংজ্ঞা না হওয়া পর্যন্ত এটি একটি / এন ঘোষণা করে:

  • অপেরা enum - enum X : int;
  • টেমপ্লেট পরামিতি - template<typename T> class MyArray; মধ্যে টি template<typename T> class MyArray;
  • প্যারামিটার ঘোষণাপত্র - int add(int x, int y); এবং যোগে int add(int x, int y); এবং x এবং y int add(int x, int y);
  • using IntVector = std::vector<int>; ঘোষণা - using IntVector = std::vector<int>;
  • স্ট্যাটিক দৃঢ় ঘোষণা - static_assert(sizeof(int) == 4, "Yikes!")
  • বৈশিষ্ট্য ঘোষণা (বাস্তবায়ন-সংজ্ঞায়িত)
  • খালি ঘোষণা ;

উপরোক্ত তালিকা অনুসারে C ++ 03 থেকে উত্তরাধিকারসূত্রে প্রাপ্ত অতিরিক্ত কলগুলি:

  • ফাংশন ঘোষণা - int add(int x, int y);
  • ঘোষণা বা একটি লিঙ্ক সংযোজক ধারণকারী বহির্মুখী স্পেসিফায়ার - extern int a; বা extern "C" { ... };
  • স্ট্যাটিক ডাটা সদস্য একটি বর্গ - class C { static int x; }; class C { static int x; };
  • ক্লাস / struct ঘোষণা - গঠন struct Point;
  • typedef ঘোষণা - typedef int Int;
  • ঘোষণা ব্যবহার করে - using std::cout;
  • নির্দেশ ব্যবহার করে - using namespace NS;

একটি টেমপ্লেট-ঘোষণা একটি ঘোষণা। একটি টেমপ্লেট-ঘোষণা এটি একটি সংজ্ঞা, যদি তার ঘোষণা একটি ফাংশন, একটি বর্গ, বা একটি স্ট্যাটিক ডেটা সদস্য সংজ্ঞায়িত করে।

ঘোষণা এবং সংজ্ঞা মধ্যে পার্থক্য যে মান থেকে উদাহরণ আমি তাদের মধ্যে নানান বুঝতে সাহায্যকারী পাওয়া যায়:

// except one all these are definitions
int a;                                  // defines a
extern const int c = 1;                 // defines c
int f(int x) { return x + a; }          // defines f and defines x
struct S { int a; int b; };             // defines S, S::a, and S::b
struct X {                              // defines X
    int x;                              // defines non-static data member x
    static int y;                       // DECLARES static data member y
    X(): x(0) { }                       // defines a constructor of X
};
int X::y = 1;                           // defines X::y
enum { up , down };                     // defines up and down
namespace N { int d; }                  // defines N and N::d
namespace N1 = N;                       // defines N1
X anX;                                  // defines anX


// all these are declarations
extern int a;                           // declares a
extern const int c;                     // declares c
int f(int);                             // declares f
struct S;                               // declares S
typedef int Int;                        // declares Int
extern X anotherX;                      // declares anotherX
using N::d;                             // declares N::d


// specific to C++11 - these are not from the standard
enum X : int;                           // declares X with int as the underlying type
using IntVector = std::vector<int>;     // declares IntVector as an alias to std::vector<int>
static_assert(X::y == 1, "Oops!");      // declares a static_assert which can render the program ill-formed or have no effect like an empty declaration, depending on the result of expr
template <class T> class C;             // declares template class C
;                                       // declares nothing

Answer #14

আমার প্রিয় উদাহরণটি "int num = 5" এখানে আপনার ভেরিয়েবল 1। Int হিসাবে সংজ্ঞায়িত করা হয়েছে 2. নুম হিসাবে ঘোষণা করা হয়েছে এবং 3. পাঁচটির মান দিয়ে তাত্ক্ষণিক। আমরা

  • একটি বস্তুর ধরন নির্ধারণ করুন, যা অন্তর্নির্মিত বা একটি বর্গ বা কাঠামো হতে পারে।
  • একটি বস্তুর নাম ঘোষণা করুন, তাই এমন একটি নাম ঘোষণা করা হয়েছে যা ভেরিয়েবল, ফাংশন ইত্যাদি অন্তর্ভুক্ত করে।

একটি ক্লাস বা কাঠামো আপনাকে পরে ব্যবহার করা হয় যখন বস্তু সংজ্ঞায়িত করা হবে কিভাবে পরিবর্তন করতে পারবেন। উদাহরণ স্বরূপ

  • এক একটি বিবিধ পরিবর্তনশীল বা অ্যারে ঘোষণা করতে পারে যা বিশেষভাবে সংজ্ঞায়িত করা হয় না।
  • C ++ এ অফসেট ব্যবহার করে আপনি একটি এমন বস্তু সংজ্ঞায়িত করতে পারেন যার নাম ঘোষণা করা নেই।

আমরা যখন প্রোগ্রামিং শিখি তখন এই দুটি পদ প্রায়ই বিভ্রান্ত হয় কারণ আমরা প্রায়ই একই সময়ে উভয়ই করি।


Answer #15

সি ++ স্ট্যান্ডার্ড সেকশন থেকে 3.1:

একটি ঘোষণাপত্র একটি অনুবাদ ইউনিট মধ্যে নাম প্রবর্তন বা পূর্ববর্তী ঘোষণা দ্বারা প্রবর্তিত নাম redclclares। একটি ঘোষণা এই নামের ব্যাখ্যা এবং গুণাবলী উল্লেখ করে।

পরবর্তী অনুচ্ছেদের রাজ্যের (জোর খনি) যে ঘোষণা একটি সংজ্ঞা না হওয়া পর্যন্ত ...

... এটি ফাংশন এর শরীর নির্দিষ্ট না করে একটি ফাংশন ঘোষণা করে

void sqrt(double);  // declares sqrt

... এটি একটি বর্গ সংজ্ঞা মধ্যে একটি স্ট্যাটিক সদস্য ঘোষণা করে

struct X
{
    int a;         // defines a
    static int b;  // declares b
};

... এটি একটি ক্লাস নাম ঘোষণা করে

class Y;

... এটি একটি প্রারম্ভিক বা ফাংশন শরীর ছাড়া extern শব্দ রয়েছে

extern const int i = 0;  // defines i
extern int j;  // declares j
extern "C"
{
    void foo();  // declares foo
}

... অথবা একটি typedef বা বিবৃতি using

typedef long LONG_32;  // declares LONG_32
using namespace std;   // declares std

এখন বড় কারণের জন্য একটি ঘোষণা এবং সংজ্ঞা মধ্যে পার্থক্য বুঝতে গুরুত্বপূর্ণ: একটি সংজ্ঞা সংজ্ঞা । সি ++ মানের বিভাগ 3.2.1 থেকে:

কোন অনুবাদ ইউনিটে কোন পরিবর্তনশীল, ফাংশন, বর্গের ধরন, গণনার ধরন বা টেমপ্লেটের একাধিক সংজ্ঞা থাকতে হবে।


Answer #16

ঘোষণা এবং সংজ্ঞা মধ্যে পার্থক্য বুঝতে আমরা সমাবেশ কোড দেখতে হবে:

uint8_t   ui8 = 5;  |   movb    $0x5,-0x45(%rbp)
int         i = 5;  |   movl    $0x5,-0x3c(%rbp)
uint32_t ui32 = 5;  |   movl    $0x5,-0x38(%rbp)
uint64_t ui64 = 5;  |   movq    $0x5,-0x10(%rbp)
double   doub = 5;  |   movsd   0x328(%rip),%xmm0        # 0x400a20
                        movsd   %xmm0,-0x8(%rbp)

এবং এই শুধুমাত্র সংজ্ঞা:

ui8 = 5;   |   movb    $0x5,-0x45(%rbp)
i = 5;     |   movl    $0x5,-0x3c(%rbp)
ui32 = 5;  |   movl    $0x5,-0x38(%rbp)
ui64 = 5;  |   movq    $0x5,-0x10(%rbp)
doub = 5;  |   movsd   0x328(%rip),%xmm0        # 0x400a20
               movsd   %xmm0,-0x8(%rbp)

আপনি কিছুই পরিবর্তন দেখতে পারেন।

ঘোষণা সংজ্ঞা থেকে আলাদা কারণ এটি শুধুমাত্র কম্পাইলার দ্বারা ব্যবহৃত তথ্য দেয়। উদাহরণস্বরূপ uint8_t ASM ফাংশন movb ব্যবহার করতে কম্পাইলারকে বলুন।

ওটা দেখ:

uint def;                  |  no instructions
printf("some stuff...");   |  [...] callq   0x400450 <[email protected]>
def=5;                     |  movb    $0x5,-0x45(%rbp)

ঘোষণাপত্রের সমতুল্য নির্দেশনা নেই কারণ এটি কার্যকর করার কিছু নেই।

উপরন্তু ঘোষণা কম্পাইলার ভেরিয়েবল সুযোগ বলে।

আমরা বলতে পারি যে ঘোষণা হল কম্পাইলার দ্বারা পরিবর্তনশীলের সঠিক ব্যবহার এবং কোনও মেমরি নির্দিষ্ট পরিবর্তনশীলের জন্য কতক্ষণ ধরে।


Answer #17

Wiki.answers.com থেকে:

ঘোষণার শব্দটির মানে হল (সি-তে) যে আপনি টাইপ, আকার এবং ফাংশন ঘোষণার ক্ষেত্রে, কোনও পরিবর্তনশীল, বা ব্যবহারকারীর সংজ্ঞাযুক্ত টাইপ বা ফাংশনের ক্ষেত্রে আপনার প্যারামিটারের আকার এবং আকারের বিষয়ে কম্পাইলারকে বলছেন। ঘোষণার ক্ষেত্রে কোনো স্থান পরিবর্তন করার জন্য মেমরিতে কোন স্থান সংরক্ষিত নেই । তবে কম্পাইলার এই ধরনের একটি পরিবর্তনশীল তৈরি করা হয় যদি রিজার্ভ কত জায়গা জানেন।

উদাহরণস্বরূপ, নিম্নলিখিত সব ঘোষণা:

extern int a; 
struct _tagExample { int a; int b; }; 
int myFunc (int a, int b);

অন্যদিকে সংজ্ঞা মানে যে ঘোষিত সমস্ত জিনিসের সাথে সাথে, স্থানটিও স্মৃতিতে সংরক্ষিত। আপনি সংজ্ঞা বলতে পারেন "সংজ্ঞা = ডিসক্লারেশন + স্পেস রিজার্ভেশন" নিম্নলিখিত উদাহরণ:

int a; 
int b = 0; 
int myFunc (int a, int b) { return a + b; } 
struct _tagExample example; 

Answers





c++-faq