Re[5]: Для чего нужно "./" в #include?
От: byleas  
Дата: 18.08.09 13:55
Оценка:
Здравствуйте, igna, Вы писали:

I>Вот. То есть #include "./path/to/header.h" в той же мере "глупая конструкция" что и #include <./Dir/Header.h>.

Ну, я бы не сказал. В первом случае явное указание, новичкам поможет, а вреда не будет. Во втором я даже не знаю, что будет
Re[6]: Для чего нужно "./" в #include?
От: igna Россия  
Дата: 18.08.09 14:36
Оценка:
Здравствуйте, Death_Mokar, Вы писали:

I>>А "./" нужен "для того чтобы указывать что путь начинается от текущей директории, а не от корня FS на юниксах"?


D_M>Да. В явном виде.


Неверно. Нужным в данном случае (напомню, что речь об инклюде) "./" не назовешь, он что есть, что его нет.

D_M>И это не фишка линукса. Так уж издревле пошло: "." — текущий каталог, ".." — родительский каталог...


Это фишка юникса. Не знаю уж, можно ли сказать, что это издревле.
Re[7]: Для чего нужно "./" в #include?
От: Death_Mokar Украина  
Дата: 18.08.09 14:56
Оценка:
Здравствуйте, igna, Вы писали:

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


I>>>А "./" нужен "для того чтобы указывать что путь начинается от текущей директории, а не от корня FS на юниксах"?


D_M>>Да. В явном виде.


I>Неверно. Нужным в данном случае (напомню, что речь об инклюде) "./" не назовешь, он что есть, что его нет.


"нужен" <> "необходим", т.е. в данном контексте "нужен" == "используется для"

D_M>>И это не фишка линукса. Так уж издревле пошло: "." — текущий каталог, ".." — родительский каталог...


I>Это фишка юникса. Не знаю уж, можно ли сказать, что это издревле.


...ну, когда-то работая учителем информатики в школе, я учил детей этому под ДОС, уж не знаю считать ли это "издревлем"
улыбок тебе дед мокар
Re[8]: Для чего нужно "./" в #include?
От: rising_edge  
Дата: 18.08.09 17:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>>> команд-лайн шелл не исполняет файл который находится в подкаталоге относительно текущего если в начале не указать .

_>>>>Не болтайте ерундой.
А>>>а вы попробуйте
_>>Я каженный божий день пробую по несколько раз. ЧЯДНТ?
А>и файлы/скрипты которые вы исполняете не прописаны в PATH?

Не все.

А>если команда начинается не на ./ то файл ищется по PATH


Это не совсем так.

А>если на / — то ето рут


Не понял фразу. Вы можете выражаться яснее?
Если путь начинается с /, то это абсолютный путь, и искать ничего не надо.

А>если на ./ — файл ищется в текущем каталоге


Да. . -- это текущий каталог.
Re: Подведем итоги
От: ChainEG  
Дата: 19.08.09 07:18
Оценка:
Спасибо всем ответившим.

Делаем вывод, что префикс "./" не нужен ни в #include<>, ни в #include"".
Re[5]: Для чего нужно "./" в #include?
От: Юрий Жмеренецкий ICQ 380412032
Дата: 19.08.09 21:56
Оценка: 5 (3)
Здравствуйте, igna, Вы писали:

I>Вот. То есть #include "./path/to/header.h" в той же мере "глупая конструкция" что и #include <./Dir/Header.h>. А то почитав твой первый ответ можно было подумать, будто в зависимости от использованных ограничителей точка с косой чертой в начале пути может иметь смысл или не иметь его. На самом деле они никогда не имеют смысла.


В специфических контекстах — могут иметь смысл: include_alias в MSVC:
#pragma include_alias("file.h", "path/file.h")
#include "file.h"     // фактически - "path/file.h"
#include "./file.h"   // фактически - "file.h", требуется полное соответствие
Re[2]: Подведем итоги
От: Аноним  
Дата: 20.08.09 11:47
Оценка:
Здравствуйте, ChainEG, Вы писали:

CEG>Делаем вывод, что префикс "./" не нужен ни в #include<>, ни в #include"".


таки да, префикс ./ роли не играет, но кавычки и скобки играют

Тесты проводились в MS VS 2008 SP1
Solution
  test1
    Dir1
      Header1.h:  std::wstring get_str() { return std::wstring(L"string 1"); }
    test1.cpp:    #include "./Dir1/Header1.h"  std::wcout << get_str();
  test2
    Dir1
      Header1.h:  std::wstring get_str() { return std::wstring(L"string 2"); }
    test1.cpp:    #include <./Dir1/Header1.h>  std::wcout << get_str();
  test3
    Dir1
      Header1.h:  std::wstring get_str() { return std::wstring(L"string 3"); }
    test3.cpp:    #include "Dir1/Header1.h"  std::wcout << get_str();
  test4
    Dir1
      Header1.h:  std::wstring get_str() { return std::wstring(L"string 4"); }
    test4.cpp:    #include <Dir1/Header1.h>  std::wcout << get_str();

Program Files
  Microsoft Visual Studio 9.0
    VC
      include
        Dir1
          Header1.h:  std::wstring get_str() { return std::wstring(L"string 5"); }


Результаты:
test1:  string 1
test2:  string 5
test3:  string 1
test4:  string 5
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.