LINUX.ORG.RU

о привычках ставших ритуалами и недостатках экстравагантности.

 , , ,


0

1
$cat wh.c
main(){    
	int a=1;
#include <stdio.h>
	printf("Hello Lor\n");
} 
$c wh   
wh
Hello Lor
10
$cat c 
gcc $1.c -o$1&&(./$1;echo $?;rm ./$1)
$

какие недостатки помещать инклюдники в функциях использующие соответствующие интерфейсы?

★★☆

Последнее исправление: cetjs2 (всего исправлений: 3)

Вероятно, отсутствие возможности с первого взгляда охватить всю картину включений? Ну и очевидное увеличение размера каждой функции на 1-2 и более строк, что увеличивает размеры исходника.

А так компилятор генерирует почти идентичный код. Какого рода недостатки имелись в виду-то? Для программиста, для пользователя, для компилятора?

Lilly
()

какие недостатки помещать инклюдники в функциях использующие соответствующие интерфейсы?

а какие достоинства ты испытываешь, когда помещаешь заголовок в середину?

emulek
()

Ну и смысл так делать? Ты везде, где нужен будет stdio.h, будешь его пихать?

ты еще сишные файлы инклюдить начни многократно без смысла.

Eddy_Em ☆☆☆☆☆
()

Все функции из stdio.h будут объявлены в main и потому будут доступны только этой функции.

Hater ★★
()
Ответ на: комментарий от tailgunner

какое слово тебой осталось не распознаным и осталось достаточно неоднозначным , что денотат включает разные?

qulinxao ★★☆
() автор топика
Ответ на: и? от qulinxao
test.c: In function `main':
test.c:10: warning: implicit declaration of function `printf'

Хинт: препроцессор не подчиняется сишным областям видимости.

unsigned ★★★★
()
Ответ на: и? от qulinxao

ППЦ, завязывай с веществами.

emulek
()
Ответ на: комментарий от unsigned

эээ а почему ксати (если я не ошибаюсь, а если ошибаюсь то разьясни pls) текстовый подстановщик не раскрыл второй одноимённый инклюдник?

«при патриархах такого не было» т.е это (не раскрытия повтора) эта какое то кривое улучшение препроцессора подобно

появлению хз когда в гну

на попытку чтения каталога как файла

строки в stderr %s: Is a directory

qulinxao ★★☆
() автор топика
Ответ на: комментарий от staseg

И вероятно epic fail, если в хедере валяется реализация инлайн-функции.

...или объявление внешних данных с забытым extern

tailgunner ★★★★★
()
Ответ на: комментарий от qulinxao

какое слово тебой осталось не распознаным

Если что, «малограмотность» относилось не к русскому языку, а к Си. Вопросы, подобные тому, который задал ты, задают первокурсники, недавно написавшие первую программу.

tailgunner ★★★★★
()

какие недостатки помещать инклюдники в функциях

При пошаговой отладке ИМХО будет жопа.

no-such-file ★★★★★
()
Ответ на: комментарий от qulinxao

эээ а почему ксати (если я не ошибаюсь, а если ошибаюсь то разьясни pls) текстовый подстановщик не раскрыл второй одноимённый инклюдник?

Потому что там есть include guard?

Deleted
()
Ответ на: комментарий от qulinxao

эээ а почему ксати (если я не ошибаюсь, а если ошибаюсь то разьясни pls) текстовый подстановщик не раскрыл второй одноимённый инклюдник? «при патриархах такого не было» т.е это (не раскрытия повтора) эта какое то кривое улучшение препроцессора подобно

да это всегда было. В header'ах всегда была защита от двойного инклуда. #pragma once или что-то похожее. В сложном проекте практически не реально предсказать, включатся или нет *.h файлы. Вот их и ставят на всякий случай. Но никто же не ждал, что такой как ты родится?

emulek
()

какие недостатки

Меньше гибкости, нельзя охватить сразу взглядом всё подключённое, как выше сказали, да и переопределение всего и вся постоянное с вылетами на препроцессоре.

Да и странный ты, люди #pragma once всякие придумывают или там

#ifndef _MY_INCLUDE_H_
#define _MY_INCLUDE_H_

......

#endif
Что-бы именно то что ты хочешь не работало собственно, да оно и не будет работать в о многих случаях.

Хз, возможность делать так есть и опять хз может в ряде случаев так делать будет удобно/надо/выгодно.

Dron ★★★★★
()

Если сильно хочется модульности - делай

void f()
{
  int printf(const char*, ...);
  ...
}
Но это тоже сомнительная практика. А директивы препроцессора всегда глобальны.

unsigned ★★★★
()
Ответ на: комментарий от Eddy_Em

Чтобы игнорить было удобнее же. Давно пора было ТС его ввести. Хотя, я игнорить не буду :}

feofan ★★★★★
()
Ответ на: комментарий от qulinxao

Но ведь в плане есть include guard.

Вообще были мысли не включать в заголовочном файле другие заголовочные файлы, а организовывать это в виде «зависимостей». Тогда необходимость include guard-ов отпадала, но включение заголовочного файла внутри функции в общем случае все равно приведет к чему-то плохому.

staseg ★★★★★
()
Ответ на: комментарий от staseg

включение заголовочного файла внутри функции в общем случае

в том и дело если хидеры плоские (без деревьев) то «что-то плохое» это что?

qulinxao ★★☆
() автор топика
Ответ на: комментарий от qulinxao

Реализация инлайн-функции внутри хедера. Глобальные переменные. То есть в конечном счете, наложив ряд ограничений, этим пользоваться можно, но практического смысла нет, сейчас все работает, удобно и без ограничений.

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 2)

А если там глобальная переменная определена, а не только прототипы функций?

anonymous
()
Ответ на: комментарий от qulinxao

чего у Патриархов не было

откуда такая уверенность?

emulek
()
Ответ на: комментарий от qulinxao

в том и дело если хидеры плоские (без деревьев)

а они не плоские. Если у тебя не тупой хэлловорлд.

emulek
()
Ответ на: комментарий от Waterlaz

В файле с исходниками. А в заголовочном только extern-объявление.

ilammy ★★★
()
Ответ на: комментарий от anonymous

Здоровый я, здоровый. А вот тебе бы к окулисту зайти, когда в следующий раз на осмотре у психиатра будешь.

roof ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.