Является 'частным' ключевое слово C?

Ваш код должен быть в заголовке, а не в div внутри вашего заголовка.

Просто добавьте это в ваш файл style.css

.header {
  position: sticky;
  top: 0;
}

. Он отлично работает.

17
задан yoozer8 7 May 2012 в 21:03
поделиться

2 ответа

private не C89 или ключевое слово C99. См. Программирование/Таблицы ссылок C на Викиучебнике *.

кроме того, C ничего не имеет **, чтобы сделать с Java и C# (и, действительно, не C++ любой). Однако обратное неверно - C++ вырос от C, например.

* Лучшая ссылка необходима!
** На самом деле, C89 "одолжил" const и volatile ключевые слова от C++ . Аналогично, C99 "одолжил" inline ключевое слово и также добавил _Bool и _Complex (как C++ bool и complex, соответственно) <глоток> [необходима цитата] .

30
ответ дан 30 November 2019 в 11:18
поделиться

Ни один не ключевые слова 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
12
ответ дан 30 November 2019 в 11:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: