C / C ++头部保护一致性

时间:2010-07-30 10:23:13

标签: c++ c

我需要一个实用程序来检查标头防护中的冲突。如果实用程序可以检查符号和文件名是否一致(使用正则表达式或其他东西),那将是很好的。

此致 rn141。

修改

示例1.断页头保护。不能防止多重包含。

// my_file1.h
#ifndef my_project_my_file1_h__
#define my_project_my_fil1_h__ // should be my_project_my_file1_h__
    // code goes here
#endif

示例2.与上述标题保护冲突。

// my_file2.h
#ifndef my_project_my_file1_h__ // should be my_project_my_file2_h__
#define my_project_my_file1_h__ // should be my_project_my_file2_h__
    // code goes here
#endif

3 个答案:

答案 0 :(得分:5)

如何使用#pragma once呢?

答案 1 :(得分:3)

我在3分钟内编写了这段代码,所以它并不完美:

#!/bin/python
from glob import glob
import re

regex = re.compile(r"#ifndef +([a-zA-z0-9]+)\n *#define +([a-zA-z0-9]+)")

HEADER_EXTENSION = "h"

file_list = glob("*." + HEADER_EXTENSION)
guards_list = []

for file_name in file_list:
    code = None
    with open(file_name) as f:
        code = f.read()
    m = regex.match(code)
    if m:
        group1 = m.group(1)
        group2 = m.group(2)
        if group1 in guards_list:
            print "duplicate %s" % group1
        else:
            guards_list.append(group1)
        if group1 != group2:
            print "guards differents in file %s" % file_name
    else:
        print "can't find guard in %s" % file_name

答案 2 :(得分:0)

我不知道任何可以轻松进行此类分析的正则表达式或现成的实用工具。

只要你的项目/文件符合命名包含警卫的特定约定,编写自己的程序就不难了。