BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> хедъри добавени по подразбиране в gcc?, gcc 9.2 / Linux
my_shadow
Публикувано на: 04-11-2019, 09:45
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 597
Регистриран на: 07.09.07



Здравейте! Радвам се че отново пиша тук след години icon_smile.gif

Имам затруднение в разбирането, кои хедъри са инклуднати по подразбиране от компилатора. Долния пример се компилира с -Wall -pedantic-errors и компилатора не мрънка.
Ползвам gcc 9.2 / Linux. Забелязах също че <string> не е нужно да го инклудвам.

CODE

/* die game: throws die 5 series x 6 times */
#include <iostream>
#include <iomanip>

/* Това --> #include <ctime>
#include <cstdlib> */

using namespace std;

using die_t = int[6];

void throw_die(die_t& t) {
   for(auto& q: t)
       q = 1 + (rand() % 6);
}

int main() {
   srand(static_cast<unsigned>(time(nullptr)));
   die_t t {0};

   int i = 0; // counter
   while(i < 5) {
       throw_die(t);
       cout << "throw " << i + 1 << ": ";
       for(const auto q: t)
           cout << setw(5) << q;
       cout << endl;
       ++i;
   }
}


Това мнение е било редактирано от my_shadow на 04-11-2019, 09:59
PMEmail Poster
Top
PxL
Публикувано на: 04-11-2019, 10:06
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 3085
Регистриран на: 26.04.05



Няма хедъри инклуднати по подразбиране в компилатора, нещата, които полваш ги имаш в твойте инклудове.


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
my_shadow
Публикувано на: 04-11-2019, 10:12
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 597
Регистриран на: 07.09.07



Значи библ. cstd** вече ги има в iostream и при разширяване на макросите вече са добавени и не трябва аз да ги добавям?
PMEmail Poster
Top
Дон Реба
Публикувано на: 04-11-2019, 10:24
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 8483
Регистриран на: 11.11.06



компилаторите обикновено имат опция която показва в билд оутпута инклудовете, така човек като получи грешка в някой инклуд дето не знае от де е влязъл, вижда пътя
PM
Top
PxL
Публикувано на: 04-11-2019, 12:43
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 3085
Регистриран на: 26.04.05



QUOTE (my_shadow @ 04-11-2019, 11:12)
Значи библ. cstd** вече ги има в iostream и при разширяване на макросите вече са добавени и не трябва аз да ги добавям?

Трябва да си ги добавяш, в случая ти идват от вторичен инклуд в имплементацията на iostream, но това не ти гарантира програмата да се компилира успешно навсякъде. Не са ги преместили icon_smile.gif

Това мнение е било редактирано от PxL на 04-11-2019, 13:38


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
my_shadow
Публикувано на: 04-11-2019, 23:45
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 597
Регистриран на: 07.09.07



Благодаря за отговорите, стоплих чайника icon_idea.gif . Това, че някой системен хедър е инклуднал (добавил) разни други хедъри и не трябва да ги добавяте СЕГА не гарантира съвместимост с други компилатори. Така, че трябва да добавяме хедърите които ползваме в кода си.

Това мнение е било редактирано от my_shadow на 04-11-2019, 23:45
PMEmail Poster
Top
PxL
Публикувано на: 04-11-2019, 23:51
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 3085
Регистриран на: 26.04.05



QUOTE (my_shadow @ 05-11-2019, 00:45)
Благодаря за отговорите, стоплих чайника icon_idea.gif . Това, че някой системен хедър е инклуднал (добавил) разни други хедъри и не трябва да ги добавяте СЕГА не гарантира съвместимост с други компилатори. Така, че трябва да добавяме хедърите които ползваме в кода си.

Абсолютно, хедърите са "idiot"-proof, така, че може да ги инклуднеш и 100 пъти без проблем, общо взето като ползваш външни неща дефинирай от къде са, така, че дори да извадят кода във файла от контекст ще е на щракане с пръсти от подкарване.

Това мнение е било редактирано от PxL на 04-11-2019, 23:53


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
my_shadow
Публикувано на: 05-11-2019, 00:01
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 597
Регистриран на: 07.09.07



Ако са гарднати с pragma или ifndef/define/endif, разбира се.
Имам си някакво понятие но код ,не съм писал отпдеди 10 год. А вече съм дърто магаре и работя нещо съвсем различно. Но откакто смених ОС се зачетох в мановете и ми стана интересно.

Това мнение е било редактирано от my_shadow на 05-11-2019, 00:01
PMEmail Poster
Top
ici
Публикувано на: 05-11-2019, 01:50
Quote Post


Group Icon
Име: Луминантен Рептилоид
Група: VIP
Ранг: Почетен член

Мнения: 16590
Регистриран на: 06.06.04



Ако не е описано изрично в документацията *.h файловете включват само неща които на тях им трябват, например нови типове данни, макроси и пр. Това че си уцелил *.h файл който е добавил за себе си друг *.h файл, нужен и на теб е страничен ефект на който не бива да се разчита. Има и дебели изключения на правилата и това са *.h файловете на разни API-та и библиотеки които събират всичко необходимо в един *.h файл, например sdl.h, zip.h, също <iostream> който включва <ios>, <streambuf>, <istream> ... но и тук има варианти според стандарта и платформата. Ти също можеш да си направиш специфичен за проекта main.h в който са инклуднати нещата които ти трябват.

Това мнение е било редактирано от ici на 05-11-2019, 01:51


--------------------
Reading undefined locations provides undefined data.
PMEmail PosterUsers Website
Top
Gamma Goblin
Публикувано на: 05-11-2019, 08:07
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2968
Регистриран на: 21.02.18



QUOTE (PxL @ 04-11-2019, 23:51)
QUOTE (my_shadow @ 05-11-2019, 00:45)
Благодаря за отговорите, стоплих чайника icon_idea.gif . Това, че някой системен хедър е инклуднал (добавил) разни други хедъри и не трябва да ги добавяте СЕГА не гарантира съвместимост с други компилатори. Така, че трябва да добавяме хедърите които ползваме в кода си.

Абсолютно, хедърите са "idiot"-proof, така, че може да ги инклуднеш и 100 пъти без проблем, общо взето като ползваш външни неща дефинирай от къде са, така, че дори да извадят кода във файла от контекст ще е на щракане с пръсти от подкарване.

Кое е idiot-proof ? Хедърите са пълна шитня и анахронизъм. Няма съвременен език който да има хедъри.


--------------------
https://www.rust-lang.org/
---
" Не може да си на висок пост без да си подкупен. Ще те махнат." - SuN Трола
PMEmail PosterUsers Website
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0