Tashqi kutubxonalardan kompilyatsiya qilishda ogohlantirishlarni yashirish

Faqatgina ushbu kodni o'z ichiga olgan main.cpp fayl bor:

#include 
#include "include/rapi/RApi.h"

using namespace std;

int main() {
    std::cout << "Test\n";
    return 0;
}

Men kompilyatsiya qilsam, kodimdan ogohlantirishlarni ko'rishni xohlayman, lekin tashqi fayllardan emas. Men bunga o'tmishda erishishim mumkin edi, lekin men ularni ko'rishni istamaganimda, to'plamdagi fayllardagi xatolarni ko'rib chiqishni davom ettirishimga qaramasdan, bu erda derleme bayrog'ida biror narsa yo'qolgan bo'lishi mumkin.

Bu mening kompilyatsiya buyrug'im:

g++ -isystem include -pedantic -Wall -Wextra main.cpp -o main.o

Main.cpp-dan ogohlantirishlar va xatolar ko'rishni xohlayman, lekin fayllarni papkaga qo'shishni xohlamayman.

-isysteminclude/rapi kodini -isysteminclude/rapi kodini sinab ko'rdim.

Men bu erda biror narsa yo'qmi?

7
@tuple_cat siz bilganimdagina buni o'zgartira olmaysiz. <> Tizim sarlavhalari uchun emas, balki loyihaning qolgan qismi bilan bir xil papkada fayllar uchun emas.
qo'shib qo'ydi muallif BlunT, manba
@MadScientist juda ko'p rahmat! Men buni o'tmishda qila olganman, lekin endi bu haqda aqldan ozgan edim. Buni javob sifatida yuboring, men buni qabul qila olaman.
qo'shib qo'ydi muallif BlunT, manba
@tuple_cat siz bilganimdagina buni o'zgartira olmaysiz. <> Tizim sarlavhalari uchun emas, balki loyihaning qolgan qismi bilan bir xil papkada fayllar uchun emas.
qo'shib qo'ydi muallif BlunT, manba
@MadScientist juda ko'p rahmat! Men buni o'tmishda qila olganman, lekin endi bu haqda aqldan ozgan edim. Buni javob sifatida yuboring, men buni qabul qila olaman.
qo'shib qo'ydi muallif BlunT, manba
@MadScientist juda ko'p rahmat! Men buni o'tmishda qila olganman, lekin endi bu haqda aqldan ozgan edim. Buni javob sifatida yuboring, men buni qabul qila olaman.
qo'shib qo'ydi muallif BlunT, manba
Buning o'rniga <> bilan ishlaysizmi? Ular tizim sarlavhalari uchun ishlatiladi.
qo'shib qo'ydi muallif emlai, manba
Nima uchun qilolmading? Men #include degani. Men buni " dan foydalanish uchun o'zgartirsam, u fayldan ogohlantirishlar olaman. Loyihaning qolgan qismi bilan bir xil papkada tizimning sarlavhalarini topa olmasligini eshitganman, hech narsa topolmadim g ++ qo'llanmasida shunday deb ayt.
qo'shib qo'ydi muallif emlai, manba
Nima uchun qilolmading? Men #include degani. Men buni " dan foydalanish uchun o'zgartirsam, u fayldan ogohlantirishlar olaman. Loyihaning qolgan qismi bilan bir xil papkada tizimning sarlavhalarini topa olmasligini eshitganman, hech narsa topolmadim g ++ qo'llanmasida shunday deb ayt.
qo'shib qo'ydi muallif emlai, manba
Rasmiy ravishda #include <...> va #include "..." o'rtasida sezilarli farq mavjud. Birinchisi, dasturni aniqlaydigan joylarning biridan sarlavha ga tortadi. Mavzu matn fayli bo'lishi shart emas. Ikkinchisida yana bir dastur-belgilangan joylardan birida matn fayli ko'rinadi va topilmasa, u holda > #include <...> direktivasi. Amalda, hech kim ikki tomonlama sarlavhani bajarmaydi, va direktifning ikkita shakli bir-birining o'rnini bosadi, faqatgina ular ko'rgan joylar to'g'risidagi qoidalar bundan mustasno.
qo'shib qo'ydi muallif Pete Becker, manba
Rasmiy ravishda #include <...> va #include "..." o'rtasida sezilarli farq mavjud. Birinchisi, dasturni aniqlaydigan joylarning biridan sarlavha ga tortadi. Mavzu matn fayli bo'lishi shart emas. Ikkinchisida yana bir dastur-belgilangan joylardan birida matn fayli ko'rinadi va topilmasa, u holda > #include <...> direktivasi. Amalda, hech kim ikki tomonlama sarlavhani bajarmaydi, va direktifning ikkita shakli bir-birining o'rnini bosadi, faqatgina ular ko'rgan joylar to'g'risidagi qoidalar bundan mustasno.
qo'shib qo'ydi muallif Pete Becker, manba
" va boshqalar <> dan foydalanish, albatta, mazmunli emas. Bu kompilyatorni amalga oshirishga butunlay javob beradi, bu farq nima (standart bu haqda hech narsa demaydi). Aksariyat kompozitorlar buni amalga oshiradilar, shuning uchun derleyici oldin -I bilan berilgan barcha kataloglarda va standart joylashuvlarda ko'rinadi va agar siz "" <> dan foydalaning, keyin faqatgina -I va tizim kataloglari mavjud papkada emas ( -I. yoki ).
qo'shib qo'ydi muallif MadScientist, manba
" va boshqalar <> dan foydalanish, albatta, mazmunli emas. Bu kompilyatorni amalga oshirishga butunlay javob beradi, bu farq nima (standart bu haqda hech narsa demaydi). Aksariyat kompozitorlar buni amalga oshiradilar, shuning uchun derleyici oldin -I bilan berilgan barcha kataloglarda va standart joylashuvlarda ko'rinadi va agar siz "" <> dan foydalaning, keyin faqatgina -I va tizim kataloglari mavjud papkada emas ( -I. yoki ).
qo'shib qo'ydi muallif MadScientist, manba
" va boshqalar <> dan foydalanish, albatta, mazmunli emas. Bu kompilyatorni amalga oshirishga butunlay javob beradi, bu farq nima (standart bu haqda hech narsa demaydi). Aksariyat kompozitorlar buni amalga oshiradilar, shuning uchun derleyici oldin -I bilan berilgan barcha kataloglarda va standart joylashuvlarda ko'rinadi va agar siz "" <> dan foydalaning, keyin faqatgina -I va tizim kataloglari mavjud papkada emas ( -I. yoki ).
qo'shib qo'ydi muallif MadScientist, manba
- #include "rapi/RApi.h" dan foydalanishingiz mumkin ( include ) -isystem insert ) manba faylida. -isystem tanlovi faqat ushbu qidirish yo'li orqali topilgan sarlavhalar uchun qo'llaniladi, lekin agar #include "include/rapi/RApi.h" bo'lsa, unda qidirish yo'li yo'q ishlatilgan bo'lsa, u to'g'ridan-to'g'ri sarlavhani o'z ichiga oladi.
qo'shib qo'ydi muallif MadScientist, manba
- #include "rapi/RApi.h" dan foydalanishingiz mumkin ( include ) -isystem insert ) manba faylida. -isystem tanlovi faqat ushbu qidirish yo'li orqali topilgan sarlavhalar uchun qo'llaniladi, lekin agar #include "include/rapi/RApi.h" bo'lsa, unda qidirish yo'li yo'q ishlatilgan bo'lsa, u to'g'ridan-to'g'ri sarlavhani o'z ichiga oladi.
qo'shib qo'ydi muallif MadScientist, manba
- #include "rapi/RApi.h" dan foydalanishingiz mumkin ( include ) -isystem insert ) manba faylida. -isystem tanlovi faqat ushbu qidirish yo'li orqali topilgan sarlavhalar uchun qo'llaniladi, lekin agar #include "include/rapi/RApi.h" bo'lsa, unda qidirish yo'li yo'q ishlatilgan bo'lsa, u to'g'ridan-to'g'ri sarlavhani o'z ichiga oladi.
qo'shib qo'ydi muallif MadScientist, manba
"Men kompilyatsiya qilsam, kodimdan ogohlantirishlarni ko'rishni istayman, lekin tashqi fayllardan emas." - Men sizning og'riqni his qilaman, lekin ehtiyot bo'ling. Ogohlantirishlar kiritilgan fayllarda ko'rinishi mumkin, ammo muammoni o'zingizning kodingizdan kelib chiqishi mumkin, yoki foydalanadigan ikkita turli kutubxonalar orasida ba'zi mos kelmasligi bo'lishi mumkin.
qo'shib qo'ydi muallif Christian Hackl, manba
"Men kompilyatsiya qilsam, kodimdan ogohlantirishlarni ko'rishni istayman, lekin tashqi fayllardan emas." - Men sizning og'riqni his qilaman, lekin ehtiyot bo'ling. Ogohlantirishlar kiritilgan fayllarda ko'rinishi mumkin, ammo muammoni o'zingizning kodingizdan kelib chiqishi mumkin, yoki foydalanadigan ikkita turli kutubxonalar orasida ba'zi mos kelmasligi bo'lishi mumkin.
qo'shib qo'ydi muallif Christian Hackl, manba
"Men kompilyatsiya qilsam, kodimdan ogohlantirishlarni ko'rishni istayman, lekin tashqi fayllardan emas." - Men sizning og'riqni his qilaman, lekin ehtiyot bo'ling. Ogohlantirishlar kiritilgan fayllarda ko'rinishi mumkin, ammo muammoni o'zingizning kodingizdan kelib chiqishi mumkin, yoki foydalanadigan ikkita turli kutubxonalar orasida ba'zi mos kelmasligi bo'lishi mumkin.
qo'shib qo'ydi muallif Christian Hackl, manba

6 javoblar

Kompilyatoringiz qatoriga -isystem insert ni kiritishingiz kerak, keyin esa kodingizni ishlatishingiz kerak:

#include "rapi/RApi.h"

(emas, balki include/rapi/RApi.h ). -isystem tanlovi faqatgina "tizim sarlavhasi" atributini ushbu qidiruv usulidan foydalanib ko'rib chiqiladigan fayllarga qo'llaydi. #include ga to'liq yo'lni qo'ygan bo'lsangiz, GCC to'g'ri yo'lni izlaydi va -ystem yo'lini ishlatmaydi, shuning uchun "tizim sarlavhasi" xususiyati qo'llaniladi.

Regarding using <> vs "", the exact difference in behavior is essentially implementation-defined. There is no need to guess, just look at various SO questions and answers, such as this one.

4
qo'shib qo'ydi
joyida! rahmat :)
qo'shib qo'ydi muallif BlunT, manba

Kompilyatoringiz qatoriga -isystem insert ni kiritishingiz kerak, keyin esa kodingizni ishlatishingiz kerak:

#include "rapi/RApi.h"

(emas, balki include/rapi/RApi.h ). -isystem tanlovi faqatgina "tizim sarlavhasi" atributini ushbu qidiruv usulidan foydalanib ko'rib chiqiladigan fayllarga qo'llaydi. #include ga to'liq yo'lni qo'ygan bo'lsangiz, GCC to'g'ri yo'lni izlaydi va -ystem yo'lini ishlatmaydi, shuning uchun "tizim sarlavhasi" xususiyati qo'llaniladi.

Regarding using <> vs "", the exact difference in behavior is essentially implementation-defined. There is no need to guess, just look at various SO questions and answers, such as this one.

4
qo'shib qo'ydi
joyida! rahmat :)
qo'shib qo'ydi muallif BlunT, manba

Kompilyatoringiz qatoriga -isystem insert ni kiritishingiz kerak, keyin esa kodingizni ishlatishingiz kerak:

#include "rapi/RApi.h"

(emas, balki include/rapi/RApi.h ). -isystem tanlovi faqatgina "tizim sarlavhasi" atributini ushbu qidiruv usulidan foydalanib ko'rib chiqiladigan fayllarga qo'llaydi. #include ga to'liq yo'lni qo'ygan bo'lsangiz, GCC to'g'ri yo'lni izlaydi va -ystem yo'lini ishlatmaydi, shuning uchun "tizim sarlavhasi" xususiyati qo'llaniladi.

Regarding using <> vs "", the exact difference in behavior is essentially implementation-defined. There is no need to guess, just look at various SO questions and answers, such as this one.

4
qo'shib qo'ydi
joyida! rahmat :)
qo'shib qo'ydi muallif BlunT, manba
#include 
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wall"
#include "include/rapi/RApi.h"
#pragma GCC diagnostic pop

int main() {
  std::cout << "Test\n";
  return 0;
}
2
qo'shib qo'ydi
BTW - "wwall-black" qilish uchun ultra-kudos, haqiqiy nenjaslar buni amalga oshiradi. Albatta, sizni mega ninja rejimiga olib boradi
qo'shib qo'ydi muallif pm100, manba
GCC ko'rsatmalarini o'sha erda joylashtiradigan va keyinchalik rapi kiritadigan o'z boshingizni qilish haqida
qo'shib qo'ydi muallif pm100, manba
Men bu ishlamayapti, deb aytmayapman, lekin men ushbu faylni N-fayllar ustida ishlashni talab qilmaydigan echimga ega bo'laman, bu erda N - bu buzg'unchi sarlavha kiritilgan fayllarning soni.
qo'shib qo'ydi muallif BlunT, manba
#include 
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wall"
#include "include/rapi/RApi.h"
#pragma GCC diagnostic pop

int main() {
  std::cout << "Test\n";
  return 0;
}
2
qo'shib qo'ydi
BTW - "wwall-black" qilish uchun ultra-kudos, haqiqiy nenjaslar buni amalga oshiradi. Albatta, sizni mega ninja rejimiga olib boradi
qo'shib qo'ydi muallif pm100, manba
GCC ko'rsatmalarini o'sha erda joylashtiradigan va keyinchalik rapi kiritadigan o'z boshingizni qilish haqida
qo'shib qo'ydi muallif pm100, manba
Men bu ishlamayapti, deb aytmayapman, lekin men ushbu faylni N-fayllar ustida ishlashni talab qilmaydigan echimga ega bo'laman, bu erda N - bu buzg'unchi sarlavha kiritilgan fayllarning soni.
qo'shib qo'ydi muallif BlunT, manba
#include 
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wall"
#include "include/rapi/RApi.h"
#pragma GCC diagnostic pop

int main() {
  std::cout << "Test\n";
  return 0;
}
2
qo'shib qo'ydi
BTW - "wwall-black" qilish uchun ultra-kudos, haqiqiy nenjaslar buni amalga oshiradi. Albatta, sizni mega ninja rejimiga olib boradi
qo'shib qo'ydi muallif pm100, manba
GCC ko'rsatmalarini o'sha erda joylashtiradigan va keyinchalik rapi kiritadigan o'z boshingizni qilish haqida
qo'shib qo'ydi muallif pm100, manba
Men bu ishlamayapti, deb aytmayapman, lekin men ushbu faylni N-fayllar ustida ishlashni talab qilmaydigan echimga ega bo'laman, bu erda N - bu buzg'unchi sarlavha kiritilgan fayllarning soni.
qo'shib qo'ydi muallif BlunT, manba