Заголовочные файлы могут работать в основном классе. Как это возможно? - PullRequest
2 голосов
/ 08 января 2020

Когда я работаю с C программированием, это нормальный include метод

#include<stdio.h>
int main()
{
    printf("Hello World");

    return 0;
}

Output: Hello World

Теперь я попытался поместить мой #include в мой основной класс и он отлично работает без каких-либо ошибок или предупреждений.

int main()
{
    #include <stdio.h>
    printf("Hello World\n");

    return 0;
}

Output: Hello World

Я пробовал этот метод с C++. Я не мог делать такую ​​деятельность там, это дает мне много ошибок.

Почему только C имеют эту технику?
Как это возможно?

Ответы [ 3 ]

6 голосов
/ 08 января 2020

Как видно здесь , внутри cdefs.h __BEGIN_DECLS определяется как

#ifdef        __cplusplus
#define __BEGIN_DECLS        extern "C" {
#define __END_DECLS        }
#else
#define __BEGIN_DECLS
#define __END_DECLS
#endif

Этот __BEGIN_DECLS используется в stdio.h, как видно здесь

Для C++, __BEGIN_DECLS расширяется до extern "C", и спецификация связи должна находиться в глобальной области видимости, а не внутри main

2 голосов
/ 08 января 2020

Заголовки c ++ (в отличие от c заголовков) определяют пространства имен (std, et c.), Которые вызывают ошибку, если включены в тело любой функции (определение пространства имен должно появляться либо в области видимости файла, либо непосредственно в другом определении пространства имен).

2 голосов
/ 08 января 2020

Я считаю, что у вас много любопытства.

У меня есть только представление о C относительном вопросе

Прежде всего, вам нужно понять compile process

Вкратце, в compile process

есть 4 основных (я называю их помощником) помощника. В вашем коде #include<stdio.h>, расположенный в основной функции, работает хорошо, потому что первый парень по имени Preprocessor .

Preprocessor обычно заменяет или сообщает другим помощникам о местонахождении вашего function или variables

Например,

#define TRUE 1

Если вы определите TRUE как 1 в своем коде, препроцессор заменит все TRUE на 1

Как мы знаем, расположение printf() находится в <stdio.h>.

Если вы хотите понять конкретно, тогда запустите gcc -E main.c в своем терминале. Советую не ставить #include<stdio.h> после printf()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...