cc 関数の暗黙の宣言 includeしないで関数を使う
以下は上級者には当たり前かもしれないが、ちょっとびっくりので
また、ネット情報がヒットしなかったのでメモる。
同じファオルダに
main.c util.cをおき
それぞれオブジェクトファイルを作成してから、リンクさせ
実行ファイルを作成。
それでも警告はでるものの、まともな実行ファイルが作成された。
通常はutil.hをincludeするべきだが
main.c
//filename: main.c
//http://www.ced.is.utsunomiya-u.ac.jp/lecture/2011/prog/p2/kadai1/3b.html
#include <stdio.h>
//#include "util.h"
int main(void){
int u, v;
u = 2; v = 3;
printf("u=%d v=%d \n", u, v);
swap(&u, &v);
printf("u=%d v=%d \n", u, v);
return 0;
}
util.c
//filename: util.c
//http://www.ced.is.utsunomiya-u.ac.jp/lecture/2011/prog/p2/kadai1/3b.html
void swap(int *a, int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
util.h
//filename: util.h
//コメントアウトしてもエラーしない
//実行ファイルもまともに実行できる????
//extern void swap(int *a, int *b);
gcc -c main.c を実行すると、以下の警告
関数「スワップ」の暗黙の宣言
~
~
~
~
0 件のコメント:
コメントを投稿