• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

kompilacja na G++

Object Storage Arubacloud
+1 głos
299 wizyt
pytanie zadane 27 września 2023 w C i C++ przez Niejaki Nowicjusz (170 p.)
wita!

To na pewno banał dla doświadczonych z C++.

Otóż używając nagłówka <math.h> i chcąc odczytać wartość jakiejś stałej (np. PI) kompilując nie mogę zastosować opcji -std=20 (lub innego std). Wyskakuje błąd że "M_P" jest poza zasęgiem.

Kompilując bez "-std=*" wszystko działa.  z czym to jest związane?
komentarz 27 września 2023 przez adrian17 Ekspert (345,160 p.)
Trudno powiedzieć o czym mówisz nie widząc kodu na który narzeka i konkretnego błędu.
1
komentarz 27 września 2023 przez j23 Mędrzec (194,920 p.)

@Niejaki, jeśli mnie pamięć nie myli, M_PI nie jest częścią standardu C, a co za tym idzie także C++.

Możesz spróbować tak:

#define _USE_MATH_DEFINES // ewentualnie __USE_MISC
#include <math.h>

 

komentarz 27 września 2023 przez adrian17 Ekspert (345,160 p.)
Jest w standardzie jako `std::numbers::pi` w <numbers> aktualnych wersjach kompilatorów. Natomiast nie zmienia faktu że bez błędu to tak na ślepo odpowiadamy, a to "poza zasięgiem" w ogóle brzmi dziwnie.
komentarz 27 września 2023 przez Niejaki Nowicjusz (170 p.)
przeniesione 27 września 2023 przez Niejaki

..to właściwie żaden kod [- tylko zabawa początkującego

#include <iostream>
#include <math.h>

int main() {
   std::cout << "Welcome ";
   std::cout << "to C++!\n";
   std::cout << M_PI;
} // end function main

program nazywa sie a.cpp i kompilując tak:

g++ a.cpp

dostaję plik "a" który wyświetla

Welcome to C++!
3.14159 -(prawidłowo)

natomiast kompilując i stosując standard (obojętne z którego roku wersji Cpp) z opcją przykładowo

-std=c++20

wyswietla:

>>g++ -std=c++20 a.cpp
a.cpp: In function 'int main()':
a.cpp:7:17: error: 'M_PI' was not declared in this scope
    7 |    std::cout << M_PI;
      |                 ^~~~

to moja wersja g++:

g++ (MinGW-W64 x86_64-ucrt-posix-seh, built by Brecht Sanders) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

komentarz 27 września 2023 przez j23 Mędrzec (194,920 p.)

No to napisałem, co możesz zrobić, by M_PI było widoczne. Ewentualnie użyj std::numbers::pi, jak wspomniał adrian17.

Podejrzewam, że użycie -std=c++20 powoduje, że kompilator bardziej restrykcyjnie podchodzi do przestrzegania standardu C++, i dlatego M_PI "nie działa".

komentarz 27 września 2023 przez adrian17 Ekspert (345,160 p.)

Ewentualnie 

Na odwrót - przede wszystkim standardowe, ewentualnie użyć M_PI lub po prostu zadeklarować samemu :P

komentarz 27 września 2023 przez j23 Mędrzec (194,920 p.)

Swoją drogą ciekawe dlaczego nie włączyli tych definicji stałych do standardu, skoro one są od dawien dawna w <math.h>.

komentarz 28 września 2023 przez TOWaD Mądrala (6,000 p.)

Coś z kompilatorem bo online działa i to nawet -std=c++23 (

g++ -std=c++23 -O2 -Wall -pedantic -pthread main.cpp && ./a.out

) i <cmath> dla c++ też.

https://coliru.stacked-crooked.com/a/73cdc72b28256765

 

komentarz 28 września 2023 przez j23 Mędrzec (194,920 p.)

No i gdyby M_PI było częścią standardu C, to nie byłoby takich cyrków. Widocznie GCC na Linuksie ma domyślnie odblokowane definicje pi i innych stałych, a MinGW nie.

komentarz 28 września 2023 przez adrian17 Ekspert (345,160 p.)

Widocznie GCC na Linuksie ma domyślnie odblokowane definicje pi i innych stałych

Tak, bo M_PI jest częścią innego standardu, POSIX, który mówi co powinno być na systemie Unixowym - więc Windowsa nie obchodzi.

to nie byłoby takich cyrków

Po to jest std::numbers::pi żeby nie było cyrków.

komentarz 28 września 2023 przez j23 Mędrzec (194,920 p.)

Tak, bo M_PI jest częścią innego standardu, POSIX

A tego nie wiedziałem, ciekawe...

 

1 odpowiedź

0 głosów
odpowiedź 30 września 2023 przez Niejaki Nowicjusz (170 p.)
dzięki wszystkim! - problem z głowy:)

Podobne pytania

0 głosów
3 odpowiedzi 188 wizyt
pytanie zadane 7 marca 2022 w C i C++ przez M1KS0N Nowicjusz (240 p.)
0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 14 marca 2017 w C i C++ przez aspoka Mądrala (5,290 p.)
+2 głosów
1 odpowiedź 130 wizyt
pytanie zadane 27 kwietnia 2020 w Inne języki przez Pabllo26 Obywatel (1,280 p.)

92,629 zapytań

141,491 odpowiedzi

319,862 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...