título tienen qué name motor metaetiquetas las keywords impacto etiquetas ejemplos description búsqueda c private

tienen - ¿Es ''privado'' una palabra clave en C?



seo title (3)

¿Las palabras clave ''privadas'' o ''públicas'' están en ANSI C (o en cualquier otra C), o solo se agregaron en C ++ (y Java, C #, ...)?


Tampoco son las palabras clave C, pero algunas personas hacen lo siguiente:

#define public #define private static

Actualizar:

Para aquellos que piensan que es una mala idea hacer lo anterior, estoy de acuerdo. Pero sí explica por qué alguien podría pensar que public palabras clave son C o public .

Para aquellos que piensan que no compilará en C, intente esto:

#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"); }

Para aquellos que piensan que no se compilará en C ++, sí, el programa anterior lo hará.

Actualizar:

Bueno, en realidad es un comportamiento indefinido debido a esta parte del estándar de C ++:

Una unidad de traducción que incluya un encabezado no contendrá macros que definan nombres declarados o definidos en ese encabezado. Esta unidad de traducción tampoco debe definir macros para nombres léxicamente idénticos a palabras clave.

Por lo tanto, no se requiere que el ejemplo de arriba y abajo haga nada sensato en C ++, lo cual es bueno. Mi respuesta todavía es completamente válida para C (hasta que se compruebe que es incorrecta! :-)).

En el caso de una clase de C ++ con miembros privados, puedes hacer algo similar (considerado un abuso) como este:

main.c :

#include <cstdlib> #define private public #include "message.hpp" int main() { Message msg; msg.available_method(); msg.hidden_method(); return (EXIT_SUCCESS); }

mensaje.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


private no es una palabra clave C89 o C99. Ver C Programación / Tablas de referencia en Wikilibros *.

Además, C no tiene nada que ver con Java y C # (y, en realidad, tampoco C ++). Sin embargo, lo contrario no es cierto: C ++ creció de C, por ejemplo.

* Mejor referencia necesaria!
** En realidad, C89 "tomó prestadas" las palabras clave const y volatile de C ++ . Del mismo modo, C99 "tomó prestada" la palabra clave en inline , y también agregó _Bool y _Complex (como bool y complex C ++, respectivamente) [cita requerida] .


static no es privado , dado que no se puede leer una variable estática incluso en el constructor de la clase (la función que forma parte de una estructura en lenguaje C).

Solo puede usar variables estáticas en la parte del código donde se definieron (en una función, una estructura, ...).