ソースについては、すべてのソース ファイルに次の行が含まれていると主張できます。
#include <beware.h>
Cヘッダーの後、beware.h
ヘッダーファイルには次が含まれます。
#define strtok unsafe_function_call_detected_strtok
#define getenv unsafe_function_call_detected_getenv
または実際の関数である可能性が低い他の適切な名前のセット。これにより、コンパイル エラーやリンカー エラーが発生します。
ライブラリの場合は、もう少し難しいです。nm
各オブジェクト ファイル内のすべての未解決の名前を抽出し、安全でない名前が呼び出されないようにするために使用することを検討できます。
これはコンパイラが行うことではありませんが、ビルド スクリプトに組み込むのは簡単です。次のトランスクリプトを参照してください。
$ cat qq.c
#include <stdio.h>
int main (int argc, char *argv[]) {
printf ("Hello, world.\n");
return 0;
}
$ gcc -c -o qq.o qq.c
$ nm qq.o
00000000 b .bss
00000000 d .data
00000000 r .rdata
00000000 t .text
U ___main
00000000 T _main
U _puts
その出力の未解決のシンボルをU
マーカーで見ることができます (書式設定コマンドなしで定数文字列を指定したため、代わりにgcc
使用することを非常にこっそりと決定しました)。puts
printf