こんにちは。<map>について質問をさせて頂きます。
対象ソースを環境1でコンパイル(g++ test.cpp)した場合、エラーなく正常に完了するのですが、環境2で同様のコマンドでコンパイルを行った場合、下記のエラーが発生します。
※<stdio.h><unistd.h>を明示的にインクルードすると正常に完了します。
test.cpp:9:24: エラー: ‘printf’ was not declared in this scope
printf("test\n");
test.cpp:10:37: エラー: ‘getpid’ was not declared in this scope
printf("p=%d\n",(int)getpid());
そもそも、環境1が何故正常に完了するのかが分からないのですが、<map>は明示的にインクルードしていないヘッダファイルを暗黙的に補完してくれる機能があるのでしょうか?
また、gcc4.1.2ではその機能があったが、gcc4.8.5ではなくなってしまったのでしょうか?
その場合、コンパイルオプション等で環境2でも環境1でコンパイルを行ったのと同等の結果を得ることは可能でしょうか?
※
試しに
g++ -std=gnu++0x test.cpp
でコンパイルを行ったところ、printfのほうのエラーは無くなりましたが、getpidのほうが解消されませんでした。
■環境1
RedHat5.7
gcc バージョン 4.1.2
■環境2
RedHat7.5
gcc バージョン 4.8.5
■対象ソース
test.cpp
C++
1#include <map> 2//#include <stdio.h> 3//#include <unistd.h> 4 5 6int main() { 7 printf("test\n"); 8 printf("p=%d\n",(int)getpid()); 9 10 return 0; 11}
以上、よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/02 04:18