Developer forums (C::B DEVELOPMENT STRICTLY!) > Development
Fix for Warning: cmd line option '-std=c11' is valid for C/ObjC but not for C++
(1/1)
Robert Eastwood:
That is a warning you get when trying to compile a CPP file with a C option. Codeblocks solved this problem by adding a right click to compiler options, and at that location it lists items to exclude. In the C Only box -std=c11 is said to be excluded.
So you should never see that warning.
Unless
You add that option in project build option settings AND the compiler setting option. In that case when the removal of c flags from cpp builds is done, it only removes one of the two times you added the flags
You add in compiler settings -std=c11
And you add in project settings -std=c11
and this code only removes one of them when building cpp file
In sdk\compilercommandgenerator.cpp line 380
--- Code: ---[size=8pt][font=courier]
wxString cFlags = m_CFlags[target];
wxArrayString remFlags;
if (compExec == ceC)
remFlags = GetArrayFromString(compiler->GetCPPOnlyFlags(), wxT(" "));
else if (compExec == ceCPP)
remFlags = GetArrayFromString(compiler->GetCOnlyFlags(), wxT(" "));
if (!remFlags.IsEmpty())
{
wxArrayString aCflags = GetArrayFromString(cFlags, wxT(" "));
for (size_t i = 0; i < remFlags.GetCount(); ++i)
{
int index = aCflags.Index(remFlags[i]);
if (index != wxNOT_FOUND)
aCflags.RemoveAt(index);
}
cFlags = GetStringFromArray(aCflags, wxT(" "), false);
}
[/font][/size]
--- End code ---
to fix this we need to remove all possible flags on the list, not just one of them
--- Code: ---[size=8pt][font=courier]
wxString cFlags = m_CFlags[target];
wxArrayString remFlags;
if (compExec == ceC)
remFlags = GetArrayFromString(compiler->GetCPPOnlyFlags(), wxT(" "));
else if (compExec == ceCPP)
remFlags = GetArrayFromString(compiler->GetCOnlyFlags(), wxT(" "));
if (!remFlags.IsEmpty())
{
wxArrayString aCflags = GetArrayFromString(cFlags, wxT(" "));
for (size_t i = 0; i < remFlags.GetCount(); ++i)
{
//RE_CODE_CHANGE while loop used to remove multiple same flags in config script
int index = aCflags.Index(remFlags[i]);
while (index != wxNOT_FOUND)
{
aCflags.RemoveAt(index);
index = aCflags.Index(remFlags[i]);
}
//RE_CODE_CHANGE END
}
cFlags = GetStringFromArray(aCflags, wxT(" "), false);
}
[/font][/size]
--- End code ---
If someone with SVN change rights wants to add that change it will fix the issue that made it where in some cases the option exclusion list was not excluding even when an option was listed there.
another method would be to check the command line for duplicates and delete them before doing that step of removing c cpp exclusive commands, if there are no reasons for duplicates and there are no reasons a user might want to know if he added same command option twice, this code could be added but it really is a design decision.
--- Code: ---[size=8pt][font=courier]
// Special handling for compiler options to filter between C and C++ compilers
wxString cFlags = m_CFlags[target];
//RE_CODE_CHANGE remove duplicate flags
wxArrayString aCflagsRemoveDups = GetArrayFromString(cFlags, wxT(" "));
wxArrayString aCflagsNoDups;
aCflagsNoDups.Empty();
if(!aCflagsRemoveDups.IsEmpty())
{
for (size_t i = 0; i < aCflagsRemoveDups.GetCount(); ++i)
{
int index = aCflagsNoDups.Index(aCflagsRemoveDups[i]);
if(index == wxNOT_FOUND)
{
aCflagsNoDups.Add(aCflagsRemoveDups[i]);
}
}
cFlags = GetStringFromArray(aCflagsNoDups, wxT(" "), false);
}
aCflagsRemoveDups.Clear();
aCflagsNoDups.Clear();
//RE_CODE_CHANGE END remove duplicate flags
wxArrayString remFlags;
if (compExec == ceC)[/font][/size]
--- End code ---
Either one of those fixes solves that problem that created some confusion where someone said they were seeing that warning, when they had the warning listed in exclusion box to be only used for c or cpp compiling.
Miguel Gimenez:
The best method for proposing a change is creating a patch file (using svn diff > fix.patch) and attach it to a ticket. In the forum the messages are soon forgotten and the patches lost.
Robert Eastwood:
--- Quote from: Miguel Gimenez on June 14, 2019, 07:47:18 pm ---The best method for proposing a change is creating a patch file (using svn diff > fix.patch) and attach it to a ticket. In the forum the messages are soon forgotten and the patches lost.
--- End quote ---
I don't have much skill in SVN and don't have a SVN setup on my laptop, only place I look at stuff such as this code.
You are right it is a better approach, and thanks for advice, although currently outside of my setup.
Not that big of a need anyways, but some probably wondered why that was occuring
stahta01:
If you have skill in git, there are Code::Blocks git repos that you can use, instead.
But, they are often a few to many commits behind the official SVN repo.
Tim S.
Robert Eastwood:
--- Quote from: stahta01 on June 26, 2019, 07:13:11 am ---If you have skill in git, there are Code::Blocks git repos that you can use, instead.
But, they are often a few to many commits behind the official SVN repo.
Tim S.
--- End quote ---
I am looking into using TortoiseSVN It seems functional on windows 10.
However I am waiting till I can afford a new SSD drive before using SVN features
I recently noticed that source from 17.12 release and latest and greatest has quite a few changes, so currently am Downloading snapshots and hoping I get all the recent updates by doing that.
Navigation
[0] Message Index
Go to full version