__FILE__ в качестве стража
От: niXman Ниоткуда https://github.com/niXman
Дата: 24.10.13 10:08
Оценка: :)
привет!

вот подумалось... возможно ли как-то, вместо того чтоб вписывать дефайн стража вручную, использовать для этого __FILE__?
что-то типа:
#ifndef THIS_FILE_ID(__FILE__)
#define THIS_FILE_ID(__FILE__)
#endif // THIS_FILE_ID(__FILE__)

где THIS_FILE_ID, что-то типа:
#define THIS_FILE_ID(file)
   REPLACE(file) // replace '/' & '.' with '_'


кто-то вообще о чем-то подобном задумывался?

благодарен.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: __FILE__ в качестве стража
От: jazzer Россия Skype: enerjazzer
Дата: 24.10.13 10:11
Оценка: 9 (1) +1
Здравствуйте, niXman, Вы писали:

X>
X>#define THIS_FILE_ID(__FILE__)
...
X>#define THIS_FILE_ID(file)
X>


тебя одинаковость этих двух строчек ни на какие мысли не наводит?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: __FILE__ в качестве стража
От: watchmaker  
Дата: 24.10.13 10:12
Оценка: +5 -1
Здравствуйте, niXman, Вы писали:

X>кто-то вообще о чем-то подобном задумывался?

Конечно. И придумали
#pragma once
Re[2]: __FILE__ в качестве стража
От: niXman Ниоткуда https://github.com/niXman
Дата: 24.10.13 10:19
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>тебя одинаковость этих двух строчек ни на какие мысли не наводит?


ах епс!
закрыто.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: __FILE__ в качестве стража
От: Evgeny.Panasyuk Россия  
Дата: 24.10.13 14:12
Оценка:
W>Конечно. И придумали
#pragma once


Только стоит помнить, что семантика всё-таки отличается от include-guard'ов.
Re[3]: __FILE__ в качестве стража
От: Alca Украина  
Дата: 24.10.13 14:21
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

W>>Конечно. И придумали
#pragma once


EP>Только стоит помнить, что семантика всё-таки отличается от include-guard'ов.


То есть?
Re[4]: __FILE__ в качестве стража
От: Evgeny.Panasyuk Россия  
Дата: 24.10.13 14:29
Оценка:
Здравствуйте, Alca, Вы писали:

A>То есть?


То есть, например, если у двух разных файлов (с точки зрения pragma once) одинаковые имена include guard'ов — то "включится" только один, а в случае pragma once — оба.
Re[5]: __FILE__ в качестве стража
От: Alca Украина  
Дата: 24.10.13 14:42
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, Alca, Вы писали:


A>>То есть?


EP>То есть, например, если у двух разных файлов (с точки зрения pragma once) одинаковые имена include guard'ов — то "включится" только один, а в случае pragma once — оба.


А зачем include guard'ы прагме?
Re[6]: __FILE__ в качестве стража
От: Evgeny.Panasyuk Россия  
Дата: 24.10.13 14:45
Оценка:
Здравствуйте, Alca, Вы писали:

A>А зачем include guard'ы прагме?


Ты ведь спросил про разницу include guard'ов vs pragma once?
Re[6]: __FILE__ в качестве стража
От: Кодт Россия  
Дата: 24.10.13 20:29
Оценка: 1 (1) +1
Здравствуйте, Alca, Вы писали:

A>А зачем include guard'ы прагме?


Проблема в том, что
— #ifndef сбоит на разных файлах с одинаковым __THE_FILENAME_H__ (это может произойти по историческим причинам после переименования; из-за очепяток и копипасты; из-за небрежности в политике раздачи имён гвардов)
— будучи многострочной конструкцией, его можно повредить при слиянии версий после каких-нибудь жестоких правок
А, с другой стороны,
— #pramga once сбоит при подключении одного и того же файла по разным путям (симлинки, хардлинки, сетевые и дисковые пути, компилятору не хватило способностей канонизировать сильно запутанный путь с ../ и ./ )
Перекуём баги на фичи!
Re[7]: __FILE__ в качестве стража
От: Evgeny.Panasyuk Россия  
Дата: 24.10.13 22:06
Оценка:
Здравствуйте, Кодт, Вы писали:

К>- #pramga once сбоит при подключении одного и того же файла по разным путям (симлинки, хардлинки, сетевые и дисковые пути, компилятору не хватило способностей канонизировать сильно запутанный путь с ../ и ./ )


Плюс хаки вида:
— специальный undef для повторного включения (ну мало ли)
— проверка был ли включён header с конкретным guard'ом
Re[8]: __FILE__ в качестве стража
От: flаt  
Дата: 25.10.13 03:30
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, Кодт, Вы писали:


К>>- #pramga once сбоит при подключении одного и того же файла по разным путям (симлинки, хардлинки, сетевые и дисковые пути, компилятору не хватило способностей канонизировать сильно запутанный путь с ../ и ./ )


EP>Плюс хаки вида:

EP>- специальный undef для повторного включения (ну мало ли)
EP>- проверка был ли включён header с конкретным guard'ом

В общем, модули ftw.
Re: __FILE__ в качестве стража
От: enji  
Дата: 27.10.13 08:25
Оценка: :)
Здравствуйте, niXman, Вы писали:

X>кто-то вообще о чем-то подобном задумывался?


import uuid

u = 'INCLUDE_GUARD_' + str(uuid.uuid1()).replace('-', '_')

text = '''#ifndef %s
#define %s
  
#endif''' % (u, u)

from Tkinter import Tk
tk = Tk()
tk.withdraw()
tk.clipboard_clear()
tk.clipboard_append(text)
tk.destroy()


Пишешь такой скрипт, делаешь на него ярлык...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.