سؤال
هل "الخاص" أو الكلمات الرئيسية "العامة" في 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).
ويمكنك فقط استخدام المتغيرات ثابتة في جزء من التعليمات البرمجية حيث تم تعريفها (في وظيفة، البنية، ...).