タグ付けされた質問 「clang」

clang LLVMコンパイラのフロントエンドに関する質問。Cに関する一般的な質問については、Cタグを使用してください。


4
XcodeでC ++ 11を使用できますか?
autoいくつかのクロスプラットフォームプロジェクト(Windows + Mac)でいくつかのC ++ 11機能(たとえば)の使用を検討しています。Windowsでは、VisualStudioはコードベースの一部を単純化できるようになる次のC ++ 11標準の一部をサポートしているので、当然、これらの機能の使用を開始することに興味があります。 しかし、私が知る限り、現在のXCodeバージョン(3.2.4 + GCC 4.2)はC ++ 11機能をまったくサポートしていません。どういうわけかGCCバージョンまたはCLangバージョンをアップグレードできますか?それとも、私はただ舌を噛んで、Appleが将来いつか新しいバージョンをパッケージ化するのを待つべきですか?
86 c++  xcode  gcc  c++11  clang 

9
カタリナC ++:<cmath>ヘッダーを使用するとエラーが発生:グローバル名前空間に 'signbit'という名前のメンバーがない
MojaveからCatalinaにアップグレードした後、環境設定で/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdkをセットアップします。 &lt;cmath&gt;ヘッダーを使用するプログラムをコンパイルできません。 CFLAGS、CCFLAGS、CXXFLAGSを変更して、何も変更しないMacOSSDKの場所を指すようにした Scanning dependencies of target OgreMain /Applications/Xcode.app/Contents/Developer/usr/bin/make -f OgreMain/CMakeFiles/OgreMain.dir/build.make OgreMain/CMakeFiles/OgreMain.dir/build [ 0%] Building CXX object OgreMain/CMakeFiles/OgreMain.dir/src/OgreASTCCodec.cpp.o cd /Users/roman/Downloads/ogre-1.12.2/build/OgreMain &amp;&amp; /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DOgreMain_EXPORTS -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src/OSX -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include/Threading -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src -I/Users/roman/Downloads/ogre-1.12.2/build/Dependencies/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include -I/Users/roman/Downloads/ogre-1.12.2/build/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain -isystem /usr/local/include -Wall -Winit-self -Wcast-qual -Wwrite-strings -Wextra -Wundef -Wmissing-declarations -Wno-unused-parameter -Wshadow -Wno-missing-field-initializers -Wno-long-long -Wno-inconsistent-missing-override -msse -O3 -DNDEBUG -arch x86_64 …

1
Clangはコードをコンパイルしませんが、gccとmsvcはそれをコンパイルしました
何が問題なのか理解できません。コードまたはコンパイラ(可能性が低い)のどちらかです。次のようなコードがあります。 #include &lt;iostream&gt; #include &lt;type_traits&gt; #include &lt;set&gt; template&lt;typename T, typename = void&gt; struct TestA: std::false_type {}; template&lt;typename T&gt; struct TestA&lt;T, std::void_t&lt;typename T::reverse_iterator&gt;&gt; : std::true_type {}; template&lt;typename T&gt; struct TestA&lt;T, std::void_t&lt;typename T::dummy_iterator&gt;&gt; : std::true_type {}; int main() { std::cout &lt;&lt; TestA&lt;std::set&lt;int&gt;&gt;::value; } GCCとMSVCの両方でコンパイルします。GCCとMSVC 17(ローカル)および19の異なるバージョンを使用して、godboltでテストしました。リンクは次のとおりです:https ://godbolt.org/z/Enfm6L 。 しかし、Clangはそれをコンパイルせず、エラーを出します。 redefinition of `'TestA&lt;T, std::void_t&lt;typename …

1
std :: swapがClang / Winのvector <bool>要素で機能しないのはなぜですか?
私はこのようなコードを持っています: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } vector&lt;bool&gt;脇見の健全性についての議論は、これはうまく機能していました: Mac用のClang Visual Studio for Windows Linux用GCC 次に、WindowsでClangを使用してビルドしようとすると、次のエラー(要約)が表示されました。 error: no matching function for call to 'swap' std::swap(vb[0], vb[1]); ^~~~~~~~~ note: candidate function [with _Ty = std::_Vb_reference&lt;std::_Wrap_alloc&lt;std::allocator&lt;unsigned int&gt; &gt; &gt;, $1 = void] not viable: expects an …

4
コンパイラのビルトインを使用せずにオーバーフローセーフな追加を効率的に計算するCスニペットはありますか?
intオーバーフローが発生すると失敗する、別のに追加するC関数を次に示します。 int safe_add(int *value, int delta) { if (*value &gt;= 0) { if (delta &gt; INT_MAX - *value) { return -1; } } else { if (delta &lt; INT_MIN - *value) { return -1; } } *value += delta; return 0; } 残念ながら、GCCやClangでは十分に最適化されていません。 safe_add(int*, int): movl (%rdi), %eax testl %eax, …

1
C ++ 17での初期化後にインライン変数を変更できますか?
私のシナリオは以下です(それはclangでは機能しましたがgccでは機能しませんでした) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp:(dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); 問題は、インライン変数が実行時にすでに変更されていたため、28を期待した場所でインライン変数が0を示していたことです。MSVCはこれに同意しませんが、clangは私が期待することを行います。 問題は、私のシナリオでは、実行時にインライン変数を変更できるかどうかです。(変数をインライン展開することで問題を解決しました。)
11 c++  visual-c++  dll  clang  c++17 

1
WindowsでCMakeを構成し、コマンドラインからclangを使用して最新のOpenMPサポートを取得する
並列化にOpenMPを使用する小さなテストプロジェクトがあります。私の目標は、OpenMP 4.5以降のサポートを備えたライブラリ(これらのタイプを使用して配布された外部ライブラリへの実際のプロジェクトリンクのため)を生成.dllし.libてライブラリ用にコンパイルし、コマンドラインから実行して、Dockerで実行できるようにすることですテストとチェック(Dockerの部分はこの質問の範囲外です。これは、コマンドラインから機能させる必要がある理由の参考に過ぎません)。私はこのプロジェクトを別のコンパイラーでコンパイルできますが、満足できないものがあります。 MSVC:、mkdir build-msvc次にcmake ..(新しく作成されたフォルダーから)、最後にcmake --build . --config Release。これは問題なくコンパイルできますが、OpenMP 2.0のみをサポートしているため、実際のプロジェクトには適していません。 Intel Parallel Studio:、mkdir build-intel次にcmake .. -T "Intel C++ Compiler 19.0"(新しく作成されたフォルダーから)、最後にcmake --build . --config Release。これはOpenMP 5.0をサポートしていますが、そのライセンスは私にとってかなり高価です。 MinGW x64 g ++:、mkdir build-g++次にcmake .. -G "MinGW Makefiles"(新しく作成されたフォルダーから)、最後にcmake --build .。これはOpenMP 4.5をサポートしていますが、このコンパイラーは.lib(私が知る限り)互換性がなく、すでに述べたように必要です。 私は成功せずにclangを使用しようとしました: MSVCからのCLANG:、mkdir build-clang-msvc次にcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..(新しく作成されたフォルダーから)、次のエラーで失敗します。 -CXXコンパイラIDは、MSVCに似たコマンドラインを備えたClang 8.0.1です。 -動作するCXXコンパイラを確認します:C:/ Program Files(x86)/ Microsoft …

1
コンパイラが呼び出し先に保存されたレジスタの使用をここで主張するのはなぜですか?
次のCコードを考えてみます。 void foo(void); long bar(long x) { foo(); return x; } -O3またはのいずれかを使用してGCC 9.3でコンパイルすると-Os、次のようになります。 bar: push r12 mov r12, rdi call foo mov rax, r12 pop r12 ret clangからの出力は、呼び出し先保存レジスタとしてではrbxなく選択することを除いて同じですr12。 しかし、私はこのように見えるアセンブリを見たいと思っています/期待しています: bar: push rdi call foo pop rax ret 英語では、これが私の目に見えるものです。 呼び出し先が保存したレジスタの古い値をスタックにプッシュします x呼び出し先が保存したレジスタに移動します コール foo 移動しx、戻り値レジスタに呼び出し先保存レジスタから スタックをポップして、呼び出し先が保存したレジスタの古い値を復元します 呼び出し先に保存されたレジスターをいじる必要がないのはなぜですか?代わりにこれを行わないのはなぜですか?それはより短く、よりシンプルで、おそらくより高速に見えます: xスタックにプッシュ コール foo xスタックから戻り値レジスタにポップ 私の組み立ては間違っていますか?余分なレジスタをいじるよりも効率が悪いのでしょうか?これらの両方に対する答えが「いいえ」である場合、GCCまたはclangのいずれかがこのようにしないのはなぜですか? …
10 c  gcc  assembly  clang  x86-64 

3
nullptrをuintptr_tに変換できますか?異なるコンパイラは同意しません
このプログラムを考えてみましょう: #include &lt;cstdint&gt; using my_time_t = uintptr_t; int main() { const my_time_t t = my_time_t(nullptr); } msvc v19.24でコンパイルできませんでした: &lt;source&gt;(5): error C2440: '&lt;function-style-cast&gt;': cannot convert from 'nullptr' to 'my_time_t' &lt;source&gt;(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type &lt;source&gt;(5): error C2789: 't': …
10 c++  c++11  gcc  visual-c++  clang 

1
テンプレートテンプレートクラスでのGCC / C ++ 17の問題
次の2つのオーバーロードを検討してください template&lt;typename T&gt; bool test() { return true; } template&lt;template&lt;typename ...&gt; class T&gt; bool test() { return false; } 1つ目は通常のクラスで機能し、2つ目はインスタンス化されていないテンプレートで機能します。例えば: std::cout&lt;&lt;test&lt;int&gt;()&lt;&lt;std::endl; &lt;-- this yields 1 std::cout&lt;&lt;test&lt;std::list&gt;()&lt;&lt;std::endl; &lt;--this yields 0 ここで、次のテンプレート関数を考えます。 template&lt;typename U&gt; bool templfun(){ struct A{ bool f(){ return test&lt;A&gt;(); // &lt;-- this gives an error } }; return test&lt;A&gt;(); …
10 c++  templates  gcc  clang  c++17 

2
異なるC ++コンパイラ間での自動型の推測の不一致
だから、私はドット積を実装しようとしています( https://en.wikipedia.org/wiki/Dot_product)を最新のC ++のいくつかのフレーバーで、次のコードを考え出しました: #include &lt;iostream&gt; template&lt;class... Args&gt; auto dot(Args... args) { auto a = [args...](Args...) { return [=](auto... brgs) { static_assert(sizeof...(args) == sizeof...(brgs)); auto v1 = {args...}, i1 = v1.begin(); auto v2 = {brgs...}, i2 = v2.begin(); typename std::common_type&lt;Args...&gt;::type s = 0; while( i1 != v1.end() &amp;&amp; i2!= v2.end()) { …

2
voidポインター(void *)が2つのデータ型の1つであるかどうかを確認するにはどうすればよいですか?
2 type秒のパラメーターを受け入れたい関数を書いています。 A string(char *) A structureにはn個の要素があります。 そして、これを達成するためにvoid *、パラメーターとして単純なタイプを使用することを考えています。しかし、私はパラメータがどちらかのタイプであるかどうかを安全に確認する方法がわかりません。
10 c  gcc  types  clang 

4
Xcode 11 ldエラー「あなたのバイナリは/usr/lib/libcrypto.dylibの許可されたクライアントではありません」
私のプロジェクトはCMakeを使用してビルドしますが、Macでビルドするときは、ローカルのmacOSバージョンのclangとldを使用します。 macOS 10.15 CatalinaでXcode 11にアップグレードした後、次のエラーでリンクできません:ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64。 これは新しいアプリの公証に関連していますか?プロジェクトがXcodeである必要がない修正(CLionを使用してmacOSで開発している)や、独自のOpenSSLビルドをリンクする必要がない修正はありますか? 助けてくれてありがとう。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.