タグ付けされた質問 「g++」

g ++は、GNU Compiler Collection(GCC)のC ++フロントエンドです。GCCはGNUコンパイラコレクションです。Linux上のC、C ++、Go、Fortran、Adaの事実上の標準コンパイラであり、他の多くの言語やプラットフォームもサポートしています。コンパイラーとは別に、GCCにはいくつかのプラットフォームやシステムで広く使用されているツールチェーン(libc、libstdc ++、objdump、nmなど)があります。



1
異なるブロックの同じ名前のexternローカル変数が、c ++のコンパイラー間で異なるリンケージを取得するのはなぜですか?
externローカル変数 にどのリンケージが許可されているかを確認しているだけですが、コンパイラ間でいくつかの異なる動作があることがわかりました たとえば 、コメント変数で見られるように、以下のコードをテストした場合、変数varのリンケージは異なります // foo.cpp int var = 10; // external linkage // main.cpp #include <iostream> static int var = 100; // internal linkage int main() { extern int var; // internal linkage std::cout << var << std::endl; { extern int var; // g++: external linkage , clang++: internal …
12 c++  g++  clang++  extern  linkage 

2
多次元配列の空の文字列リテラルがnullポインターに減衰するのはなぜですか?
いくつかの文字列リテラルで初期化された多次元C文字列配列を定義したいと思います。ではC Iは、次の操作を行います: #include <stdio.h> const char *strArr[2][1] = { {"foo"}, {""}}; int main(void) { printf("%p\t%p\n", strArr[0][0], strArr[1][0]); return 0; } gcc -std=c18 -pedantic test.c結果をコンパイルして実行すると、次のようになります。 $ ./a.out 0x55d95410f004 0x55d95410f008 予想どおり、空の文字列リテラルはstrArr[1][0]有効なポインタに減衰します。 しかし、私は同じコードを試してみてくださいC ++: #include <cstdio> const char *strArr[2][1] = { {"foo"}, {""}}; int main(void) { printf("%p\t%p\n", strArr[0][0], strArr[1][0]); return 0; } g++ …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.