سؤال

هل "الخاص" أو الكلمات الرئيسية "العامة" في ANSI C (أو أي C آخر لهذه المسألة)، أو وأضافوا فقط في C ++ (و Java، C #، ...)؟

هل كانت مفيدة؟

المحلول

وprivate ليس C89 أو C99 الكلمة. انظر الجدولين C برمجة / مرجع على ويكي الكتب *.

وأيضا، C ديه ** علاقة مع جافا وC # (وحقا، وليس C ++ إما) لا شيء. ومع ذلك، فإن العكس ليس صحيحا - نمت C ++ من C، على سبيل المثال

* إشارة أفضل حاجة!
** في الواقع، C89 "استعار" على const والكلمات الرئيسية volatile من C ++ . وبالمثل، C99 "استعار" الكلمة inline، وأضاف أيضا _Bool و_Complex (مثل C ++ الصورة andbool complex، على التوالي) <سوب> [-بحاجة لمصدر] .

نصائح أخرى

ولا تكون C الكلمات الرئيسية، ولكن بعض الناس ما يلي:

#define public 
#define private static

تحديث:

وبالنسبة لأولئك الذين يعتقدون انها فكرة سيئة للقيام أعلاه، أود أن نوافق على ذلك. ولكنه لا يفسر لماذا شخص ما قد يظن public أو private هي C الكلمات الرئيسية.

وبالنسبة لأولئك الذين يعتقدون أنه لن يجمع في C، حاول هذا:

#include <stdio.h>
#include <stdlib.h>

#define public
#define private static

private void sayHello(void);

public int main(void) {
    sayHello();

    return (EXIT_SUCCESS);
}

private void sayHello(void) {
   printf("Hello, world\n");
}

وبالنسبة لأولئك الذين يعتقدون أنه لن يجمع في C ++، نعم البرنامج أعلاه سوف.

تحديث:

وحسنا في الواقع هو سلوك غير معرف بسبب هذا الجزء من المعيار C ++:

<اقتباس فقرة>   

وحدة الترجمة التي تشمل   يجب ألا يحتوي على أي رأس وحدات الماكرو   التي تحدد أسماء أعلنت أو محددة   في هذا الرأس. كما أنه لا يجوز مثل هذا   وحدة الترجمة تحدد وحدات الماكرو ل   أسماء متطابقة مفرداتيا إلى الكلمات الرئيسية.

وهكذا المثال أعلاه وأدناه ليست مطلوبة لفعل أي شيء عاقل في C ++، وهو أمر جيد. جوابي هو لا يزال ساري المفعول تماما عن C (حتى ثبت أن أكون مخطئا! :-)).

في حالة فئة C ++ مع أعضاء من القطاع الخاص، يمكنك أن تفعل شيئا من هذا القبيل (يعتبر الاعتداء) مثل هذا:

على main.c : ل

#include <cstdlib>
#define private public
#include "message.hpp"

int main() {
    Message msg;

    msg.available_method();
    msg.hidden_method();

    return (EXIT_SUCCESS);
}

على message.hpp : ل

#ifndef MESSAGE_H
#define MESSAGE_H

#include <iostream>

class Message {
  private: 
      void hidden_method();

  public: 
      void available_method();
};

inline void Message::hidden_method() {
    std::cout << "this is a private method" << std::endl;
}

inline void Message::available_method() {
    std::cout << "this is a public method" << std::endl;
}

#endif

ثابت ليست مثل خاص ، بالنظر إلى أن كنت لا تستطيع قراءة متغير ثابت حتى في منشئ من الطبقة (وظيفة التي inits أعضاء البنية في لغة C).

ويمكنك فقط استخدام المتغيرات ثابتة في جزء من التعليمات البرمجية حيث تم تعريفها (في وظيفة، البنية، ...).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top